0

我正在编写一个程序来编辑一个 txt 文件。

但是我发现windows API WriteFile只能将数据/字符添加到文件中,而不能从文件中删除数据。

我想出的唯一解决方案是使用ReadFile将整个文件读入缓冲区,然后使用循环将数据逐个移位,然后用新文件替换旧文件。但我认为这可能会使我的程序非常慢。

任何人都可以帮忙吗

谢谢。

4

2 回答 2

0

truncate()如果您尝试从文件末尾删除,使用and可以非常快ftruncate()

你想从哪里删除数据?如果是从中间,你必须使用fseek():如果文件包含“ABCDEFG”,并且你想删除“DEF”,使用fseek()到达G,将“G”复制到缓冲区,fseek到“C”所在的位置,那么write()那里有什么。然后使用 . 将文件截断为正确的大小ftruncate()

如果这确实成为您的性能问题,您将需要以一种解决此问题的方式设计文件或使用某种数据库。您可能还想使用内存映射文件,但通常最好由其他人编写的数据库来完成,而不是重新发明轮子。

于 2013-06-01T19:33:38.537 回答
0

文件是线性数据流。如果要从文件中删除内容,则必须重写文件中已删除部分之后的所有内容。因此,除非要删除的内容位于文件末尾,否则您将需要执行一些写入操作。在最坏的情况下,为了删除文件的第一个字节,除了删除的字节之外,您需要重新写入整个文件。

FWIW,Raymond Chen 写了一篇关于这个主题的好文章:如何从文件开头删除字节?

于 2013-06-01T20:15:11.573 回答