如何检查二进制文件中是否存在字符串?

问题描述 投票:1回答:1

我有一个binary文件(not一个文本文件),大小约为20M,并且我具有该文件中可能存在或可能不存在的字符串。通常(对于文本文件),我将使用getline()逐行读取文件,然后使用find进行检测,例如:

bool found = false;
{
    std::string stringToLookFor("string to look for");
    std::ifstream ifs("myBinaryFile.bin");
    std::string line;
    while (!found && getline(ifs, line)) {
        found = (line.find(stringToLookFor, 0) != std::string::npos);
    }
    ifs.close();
}

但是,我不确定对于二进制文件而言这是否明智。我主要担心的是此类文件的“行”可能很大。可能整个20M文件不包含换行符,因此我可能最终以较大的字符串进行搜索以进行搜索(这种方法也可能存在other问题,因此是我的问题)。

这被认为是可行的方法,还是我可能会遇到问题?是否有比普通的逐行文本搜索二进制文件更好的方法?

c++ string search binaryfiles
1个回答
0
投票

最简单,最快的方法是,@ ZDF如何在注释中建议将整个文件读入内存,然后在其内容中搜索您的字符串:

#include <fstream>
#include <vector>
#include <algorithm>

std::ifstream ifs(filename, std::ios::binary);
ifs.seekg(0, std::ios::end);
auto size = ifs.tellg();
ifs.seekg(0);
std::vector<char> content(size, '\0');
ifs.read(content.data(), size);
auto res = std::search(content.begin(), content.end(), str.begin(), str.end());
© www.soinside.com 2019 - 2024. All rights reserved.