尝试从文件读取时设置Failbit - 为什么?

时间:2014-09-11 09:44:44

标签: c++ fstream

我正在尝试编写一个自动格式化XML-Strings的函数;但是当我尝试从文件中读取文本并将其写入另一个文件时,我已经失败了。

当我使用我的函数sortXMLString()

bool FormatXML::sortXMLString()
{
    string XMLString;
    ifstream fin("input.txt");
    fin.open("input.txt", ios::in);
    ofstream fout("output.txt");
    fout.open("output.txt", ios::out);
    if (fin.is_open() && fout.is_open())
    {
        if (fin.good()) cout << "good" << endl;
        if (fin.fail()) cout << "fail" << endl;
        if (fin.bad()) cout << "bad" << endl;
        while (getline(fin, XMLString))
        {
            //TODO: Formatting
            fout << &XMLString << endl;
        }
        fin.close();
        fout.close();
    }
    else return false; 
    return true;
}

我将得到输出&#34;失败&#34;,但该功能永远不会进入while循环。该函数返回true。 我写入input.txt(单个字母,单个数字,多行文本甚至没有)的内容并不重要,在getline甚至可以达到之前,将始终设置failbit。 为什么这个/我怎样才能正确读出我的文件?

1 个答案:

答案 0 :(得分:6)

ifstream fin("input.txt");会以fin作为流对象打开文件,为什么再次调用open成员函数?同样适用于fout对象。

在已打开的流上调用open失败,这意味着failbit标志设置为true。

只需打开一次

ifstream fin("input.txt");
ofstream fout("output.txt");