我正在做一个小型的Huffman压缩加密程序,在文件解压缩过程中,我当前的getFile方法(应该将整个文件作为String返回)比预期更快结束,并试图强制它在误报EOF之后阅读(可能?它与同一个字符串一致)会导致程序崩溃。
这是我目前的方法:
string getFile(string route){
ifstream reader;
string s="";
reader.open(route);
if(reader.bad())return "FAILURE TO OPEN FILE";
reader.read((char*)&dictionary.weight, sizeof(int)); // There's an int in the beggining
// It describes the original ammount of chars there were in the original file.
while(!reader.eof()){ s+= reader.get() }
reader.close();
return s;
}
答案 0 :(得分:2)
您应该以二进制模式打开文件。这意味着不应在文件内容和程序看到的内容之间执行转换。默认值称为文本模式,可能会发生各种转换;例如在Windows中,\r\n
通常会翻译为\n
,而字节26可能会显示为文件结尾。
reader.open(route, ios::binary);