我想使用C ++找到二进制文件中第一次出现ANSI字符串。
我知道字符串类有一个方便的查找功能,但我不知道如果文件很大,我怎么能用它,比如5-10 MB。
我是否需要先将整个文件复制到内存中的字符串中?如果是,我怎样才能确保复制时没有二进制字符被破坏?
或者是否有更有效的方法来执行此操作,而无需将其复制到字符串中?
答案 0 :(得分:5)
我是否需要先将整个文件复制到内存中的字符串中?
没有
或者是否有更有效的方法来完成它,而不需要将其复制到字符串中?
当然;使用std::ifstream
打开文件(请务必在binary mode而非文字模式下打开),创建一对multi_pass
iterators(来自Boost。Spirit)在流周围,然后使用std::search
搜索字符串。
答案 1 :(得分:2)
首先,不要担心角色损坏。 (但不要忘记以二进制模式打开文件!)现在,假设您的搜索字符串长度为n
个字符。然后,您可以一次搜索整个文件,只要您确保将每个块的最后n-1
个字符保留在下一个块之前。这样,您就不会丢失跨越块边界的匹配。因此,您可以使用该方便的查找功能,而无需立即将整个文件读入内存。
答案 2 :(得分:0)
如果您可以将文件映射到内存中,则可以避免复制。