【发布时间】:2011-09-20 19:40:17
【问题描述】:
我想使用 C++ 从二进制文件中删除部分。二进制文件大约 5-10 MB。
我想做的事:
- 搜索 ANSI 字符串“某物”
- 一旦我找到这个字符串,我想删除下面的 n 个字节,例如下面的 1 MB 数据。我想删除那些字符,而不是用 NULL 填充它们,从而使文件更小。
- 我想将修改后的文件保存到一个新的二进制文件中,和原来的文件一样,除了我删除的少了n个字节。
你能给我一些建议/最佳实践如何最有效地做到这一点吗?我应该先将文件加载到内存中吗?
如何有效地搜索 ANSI 字符串?我的意思是,在找到该字符串之前,我可能必须跳过几兆字节的数据。 >> 有人告诉我我应该在另一个问题中问它,所以它在这里: How to look for an ANSI string in a binary file?
如何删除 n 个字节并将其高效地写入新文件?
好的,我不需要它超级高效,文件不会大于 10 MB,运行几秒钟就可以了。
【问题讨论】:
-
您想要可移植的代码吗?或者您会对特定于平台的解决方案感到满意吗?
-
我希望它是一个命令行应用程序,可以在 Linux 和 VS2010 下编译。在 Linux 和 VS2010 下编译会不会更难?
-
如果你能忍受编写 3 行依赖于操作系统的代码,我建议使用内存映射。这种事情真是太棒了,你不能更有效地做到这一点。删除范围等于
memcpy并根据删除范围的长度截断文件。另外,它超级快。 -
或者只是将文件分两块写在要删除的段之前和之后。
-
这确实应该作为几个问题来问。
标签: c++ search replace binaryfiles ifstream