我正在编写一个程序来编辑一个 txt 文件。
但是我发现windows API WriteFile只能将数据/字符添加到文件中,而不能从文件中删除数据。
我想出的唯一解决方案是使用ReadFile将整个文件读入缓冲区,然后使用循环将数据逐个移位,然后用新文件替换旧文件。但我认为这可能会使我的程序非常慢。
任何人都可以帮忙吗
谢谢。
我正在编写一个程序来编辑一个 txt 文件。
但是我发现windows API WriteFile只能将数据/字符添加到文件中,而不能从文件中删除数据。
我想出的唯一解决方案是使用ReadFile将整个文件读入缓冲区,然后使用循环将数据逐个移位,然后用新文件替换旧文件。但我认为这可能会使我的程序非常慢。
任何人都可以帮忙吗
谢谢。
truncate()
如果您尝试从文件末尾删除,使用and可以非常快ftruncate()
。
你想从哪里删除数据?如果是从中间,你必须使用fseek()
:如果文件包含“ABCDEFG”,并且你想删除“DEF”,使用fseek()
到达G,将“G”复制到缓冲区,fseek
到“C”所在的位置,那么write()
那里有什么。然后使用 . 将文件截断为正确的大小ftruncate()
。
如果这确实成为您的性能问题,您将需要以一种解决此问题的方式设计文件或使用某种数据库。您可能还想使用内存映射文件,但通常最好由其他人编写的数据库来完成,而不是重新发明轮子。
文件是线性数据流。如果要从文件中删除内容,则必须重写文件中已删除部分之后的所有内容。因此,除非要删除的内容位于文件末尾,否则您将需要执行一些写入操作。在最坏的情况下,为了删除文件的第一个字节,除了删除的字节之外,您需要重新写入整个文件。
FWIW,Raymond Chen 写了一篇关于这个主题的好文章:如何从文件开头删除字节?