如何从文件中删除数据/字符?

时间:2013-06-01 19:25:40

标签: winapi

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

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

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

任何人都可以帮忙吗

感谢。

2 个答案:

答案 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?