Результат хеша, вероятно, содержит байты, которые отображаются в символы, которые не разрешены в имени файла (например, null-char, '+', '?' И т. Д ....).Так что «hashStr» в вашем коде, скорее всего, не будет строкой, а просто массивом байтов, которые не заканчиваются нулем.
Попробуйте эту маленькую функцию преобразовать из «двоичного хеша в строку, подходящую для файла».name "
void HashToString(unsigned char* shaHash, std::string* pStr)
{
char szHash[SHA256_DIGEST_SIZE*2+1];
char* pszOut = szHash;
for (int x = 0; x < SHA256_DIGEST_SIZE; x++)
{
sprintf(pszOut, "%.2X", shaHash[x]); // write out as hex chars
pszOut += 2; // advance 2 chars
}
*pszOut = '\0'; // null terminate
*pStr = std::string(szHash);
}
В приведенном выше примере кода вы бы назвали его следующим образом:
std::string str;
HashToString(hashStr, &str);
HANDLE newF = CreateFileA(str.c_str(), ...);