FileStore :: OpenErr在内存位置0x012FED64

时间:2018-01-24 10:55:59

标签: c++ visual-studio visual-studio-2017 crypto++

我正在使用Crypto ++库来散列文件。我在第<:p>行收到错误 FileStore::OpenErr at memory location 0x012FED64

FileSource file(filename.c_str(), false, new HexEncoder(new StringSink(result)));

代码是:

#include <iostream>
#include "..\cryptopp\sha.h"
#include "..\cryptopp\hex.h"
#include "..\cryptopp\files.h"
using namespace std;

string hashFile(string filename);

int main() {
    string shahash("");
    string fileName = "D:\test.txt";
    shahash = hashFile(fileName);
    cout << shahash << endl;
    return 0;
}

string hashFile(string filename)
{
    string result;
    SHA256 hash;
    FileSource file(filename.c_str(), false, new HexEncoder(new StringSink(result)));

    file.PumpAll();
    return result;
}

细节错误如下:

Exception thrown at 0x764B08B2 in myproject.exe: Microsoft C++ exception: CryptoPP::FileStore::OpenErr at memory location 0x012FED64.
Unhandled exception at 0x764B08B2 in myproject.exe: Microsoft C++ exception: CryptoPP::FileStore::OpenErr at memory location 0x012FED64.

The program '[13128] myproject.exe' has exited with code 0 (0x0).

描述错误的屏幕截图是:

enter image description here

出现这种错误的可能原因是什么?

谢谢。

2 个答案:

答案 0 :(得分:2)

string fileName = "D:\test.txt";

应该是

string fileName = "D:\\test.txt";

\t是制表符。我很确定你不想在你的文件名中使用它。

答案 1 :(得分:1)

可以使用errno以编程方式检查吗?添加到文件的开头:

#include <cerrno> // for errno
#include <cstring> // for strerror

然后将您的抛出hashfile调用包装到try:

try
{
    shahash = hashFile(fileName);
} 
catch(CryptoPP::FileStore::OpenErr const&)
{
    cout << "Error: " << strerror(errno) << '\n';
    return 42;    
}

如果在堆栈展开期间没有任何内容在析构函数中进一步失败调用,那么errno会告诉cout该文件有什么问题。你也摆脱了未处理的异常崩溃。

我的猜测是"D:\test.txt"是错误的文件名,您需要"D:\\test.txt"