如何从 C 或 C++ 格式的文件中删除字节?

How do I delete bytes from a file in C or C++?

本文关键字:文件 删除 字节 格式 C++      更新时间:2023-10-16

我已经在谷歌上搜索了几个小时......阅读,阅读,阅读,但我遇到的似乎没有回答这个简单的问题:在C或C++编程中:我有一个文件,它包含"hello world"。我想删除"世界"(例如在文本编辑器中按退格键),然后保存文件。我该怎么做?

我知道文件是(这里提供了很好的信息!),它似乎没有办法从文件中删除项目,我已经研究了stdio.h:http://www.cplusplus.com/reference/cstdio/fopen/中所有与文件相关的功能。

在我看来,文件和流因此不像数组:我不能只是从文件中删除一个字节!而是(我猜?我必须创建一个完整的新文件并将整个原始文件复制到新文件中,而不删除我要删除的部分?是这样吗?

我能想到的唯一其他选择是寻找"世界"之前的位置,然后将二进制零写入文件末尾,从而覆盖"世界"。然而,这样做的问题是文本编辑器现在将不再正确显示此文件,因为它中有不可打印的字符 - 并且文件大小没有缩小 - 它仍然包含这些字节 - 只是它们现在持有零而不是ASCII文本,所以这似乎也不对。

相关

  • 在C++中调整文件的大小

你想要 std::filesystem::resize_file()

假设您的原始文件是"data.txt"。作为代码的一部分,打开一个新的临时文件,说"data.txt.tmp",然后开始从原始文件向其中写入内容。写入数据后,将原始文件替换为新文件。

您可以使用源文件中的内存映射,并将所需的数据块复制到目标文件上的另一个内存映射。这是简单快捷的方法(见 http://man7.org/linux/man-pages/man2/mmap.2.html)