是
找到
功能不能与exe一起使用?我尝试在exe中找到wstring。它总是不匹配。但是,如果我创建一个txt并将exe中的二进制文件复制到txt,它就可以找到它。
std::wifstream file(L"D:/file.exe", std::ios::binary);
if (file.is_open())
{
file.seekg(0, file.end);
std::streamoff length = file.tellg();
file.seekg(0, file.beg);
wchar_t *buffer = new wchar_t[length];
file.read(buffer, length);
std::wstring sFile;
sFile = buffer;
size_t index = sFile.find(L"Something");
if (index != std::string::npos) std::cout << "It's found";
file.close();
delete[] buffer;
}
else
{
std::cout << "It's not open";
}
答案 0 :(得分:3)
该可执行文件可能早在文件中就有0个字节(即0x00
)。当您执行sFile = buffer;
时,它假定buffer
是C样式的字符串,以0字节结尾。因此sFile
将只包含该点之前的字节。
要解决此问题,您应该将整个缓冲区放入字符串中:
std::wstring sFile(buffer, length); // Directly using the constructor, or
sFile.assign(buffer, length); // after construction
答案 1 :(得分:1)
只是改变
std::wstring sFile;
sFile = buffer;
到
std::wstring sFile(buffer, buffer+length);
当将char-buffer分配给wstring对象时,字符串的长度由第一个空字符确定。因此,文件中包含的第一个0x00字节表示字符串的结尾。