我有一个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问题,因此是我的问题)。
这被认为是可行的方法,还是我可能会遇到问题?是否有比普通的逐行文本搜索二进制文件更好的方法?
最简单,最快的方法是,@ 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());