使用C ++读取整个文件,忽略误报EOF

时间:2015-11-22 23:57:24

标签: c++ file fstream ifstream

我正在做一个小型的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; 
}

1 个答案:

答案 0 :(得分:2)

您应该以二进制模式打开文件。这意味着不应在文件内容和程序看到的内容之间执行转换。默认值称为文本模式,可能会发生各种转换;例如在Windows中,\r\n通常会翻译为\n,而字节26可能会显示为文件结尾。

reader.open(route, ios::binary);

此外,don't use eof in a loop condition