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