0

我想在文本文件中找到一行并将其删除。前任:

 aaa       aaa
 bbb   ->  ccc (bbb deleted)
 ccc

有一个例子可以做到这一点,但它写入新文件并重写。如何在不写入另一个文件的情况下做到这一点(也无需重写同一个文件,因为它包含大量数据)

4

3 回答 3

0

我认为唯一的做法是编写一个新文件。

如果您考虑文件系统,以及文件如何存储在硬盘上。大多数文件系统会将文件作为顺序块存储在硬盘上。如果你只是从文件中删除这些字节,那么文件中就会有一个空洞。您必须将删除的字节右侧的字节移到文件的左侧。无论哪种方式,文件系统都会限制您。

相反,您可以尝试尽量减少编写新文件的次数。例如,如果您正在为大文件制作文字处理器,您可以保存一个包含用户所做编辑的文件,并在用户关闭文件后执行这些命令(并且只写入一次文件)。

于 2013-09-07T09:51:21.733 回答
0

你不能。所有具有此功能的软件都将文件的内容复制到一个变量中并删除该行并将该行被删除的内容复制回该行。

所以你需要复制文件的内容。逐行阅读,直到到达该行并将其删除并再次保存内容。

这就是记事本和其他编辑器的工作方式。这就是为什么大多数编辑器只接受最大 1 GB 的文件。因为处理大文件需要时间。

希望这可以帮助。

我不会发布任何代码,因为您已经说过您找到了解决方案。

于 2014-09-07T21:41:38.170 回答
0

您是否尝试将文本文件内容获取到字符串数组变量?

这是一个伪代码我该怎么做;

var your_text_content= txt file;
var your_new_text_content = your_text_content.replace("line you are looking for",""); 
txtfile = your_new_text_content;
于 2013-09-07T09:10:10.907 回答