最近写一个用于计算文件哈希值的函数,如下所示
std::string hash(const std::string& filePath)
{
int wideStringLength = MultiByteToWideChar(CP_UTF8, 0, filePath.c_str(), -1, NULL, 0);
std::wstring wideString(wideStringLength, L'\0');
MultiByteToWideChar(CP_UTF8, 0, filePath.c_str(), -1, &wideString[0], wideStringLength);
HANDLE fileHandle = CreateFile(wideString.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (fileHandle == INVALID_HANDLE_VALUE) {
std::cerr << "Error opening file: " << GetLastError() << std::endl;
return "";
}
......
}
没问题的代码我省略了, 现在的问题是我创建了两个文件用于测试, 文件内容相同(因为是直接复制的), 只有文件名不同. 使用如下代码进行测试
std::cout << hash("config.ini") << "\n" << hash("config1.ini) << "\n";
结果是第一个文件被正常计算哈希值并输出, 第二个文件时输出Error opening file: 2
我又试了试其他的各种文件, 发现config.ini貌似是个个例, 其他文件也是输出Error opening file: 2
我怀疑是string转宽字符串wstring时有问题, 但我不确定具体是哪的问题, 帮帮我
