如何从 C 或 C++ 格式的文件中删除字节?
How do I delete bytes from a file in C or C++?
我已经在谷歌上搜索了几个小时......阅读,阅读,阅读,但我遇到的似乎没有回答这个简单的问题:在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)
相关文章:
- 如何在我从C++文件中读取后立即删除行
- 删除 XML 文件中的子节点C++
- 如何在输入新内容 c++ 之前删除文件中的所有内容
- 如何更新和删除文本文件中的特定逗号分隔值?C++
- 为什么我的程序在读取/写入文件时会删除最重要的数字?
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- 如何自动获取我的项目的路径并删除一些文件
- C++ VS 错误:<实验/文件系统>提供 std::experimental::文件系统的标头已被Microsoft弃用,将被删除
- 如果我删除指针,我的C++程序会意外删除系统文件吗?
- 在 c++ 中打开文件、删除标点符号并追加到另一个文件中
- 文件删除(使用取消链接)与释放所有磁盘空间之间的延迟
- 重命名批处理文件(删除名称中的一些符号)(python/matlab/shell)
- 如何找到字符串并使用C 文件中的文件删除它
- 使用 DEF 文件删除 dll 导出的名称
- 关闭后等待文件删除
- c++中的文件删除
- 如何共享文件删除权限时,我打开一个文件ifstream
- 典型的Win32文件删除(IDropTarget::drop)实现
- 生成文件模式规则:循环生成文件.o < - 删除生成文件依赖项