c++ - 如何知道指定的文件是否被正确读取?

标签 c++ fstream ifstream

为什么 ifstream 在读取指定文件的最后一行后将 failbit 设置为 1?如何知道指定文件是否被正确读取?

bool read_csv_file(const char* filename, vector<string>& lines, bool adding = false)
{
    if( !adding ) lines.clear();

    ifstream csvfile;
    csvfile.open(filename);

    if( csvfile.is_open() )
    {
        string line;
        while( csvfile.good() && getline(csvfile,line) )
        {
            lines.push_back(line);
            cout << "fail: " << csvfile.fail() << endl;
        }
        cout << "fail: " << csvfile.fail() << endl;
        csvfile.close();
        return (!csvfile.fail());
    }

    return false;
}

最佳答案

失败位在您运行完文件末尾后设置。一旦发生这种情况,您就不能试图解释您的输入操作的结果。不过,这很好,getline 不会在仍有任何 数据要读取时设置失败位。所以下面的标准循环 extracts all the lines :

for (std::string line; std::getline(csvfile, line); )
{
    // process "line"
}

// all done

关于c++ - 如何知道指定的文件是否被正确读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430738/

相关文章:

c++ - 如何在 C 代码上从终端运行 Google 测试?

c++ - 操作系统中的互斥量

c++ - 如何从 C++ 中的 Base64 编码字符串在 GDI+ 中创建图像?

c++ - fstream 替换文件的一部分

C++ read() 问题

c++ - tellg() 函数给出错误的文件大小?

java - 如何在 java 中执行 map[u].push_back(v) (c++)?

c++ - 没有匹配的函数来调用 getline()

C++:每次我通过fstream读入时,最后都会多出一个字符

c++ - 带有通配符的 ifstream