1

我想逐行读取文件。做了类似的事情

void Parse (string filepath) {
    ifstream sourceFile;
    sourceFile.open(filepath);
    for (string line; getline(sourceFile, line);) {
        cout << "1" << endl;
        cout << line << endl;
    }
}

int main() {
    Parse("C:\\test.txt");

    getchar();
    return 0;
}

然后将一些文本放入C:\test.txt,但是当我运行时,我什么也没有得到。为什么?甚至不是“1”。如果文件也不存在,我注意到没有例外。我想这是一个问题的迹象?

4

3 回答 3

3

您必须手动检查成功/错误。尝试ifstream::good()

sourceFile.open(filepath);
if(!sourceFile.good()) {
  // do something

如果您不想手动检查,可以启用异常

// call that before open()
sourceFile.exceptions ( ifstream::failbit | ifstream::badbit );
于 2012-10-22T14:46:22.443 回答
2

我认为您在打开文件时遇到问题。我建议两件事:

  • 检查 sourceFile 是否打开成功( if (sourceFile))
  • 调试代码并查看代码遵循的代码路径。

编辑:在我的答案中添加问题的实际解决方案(而不仅仅是评论),这样人们就不会错过它:

这里还有一个想法 - 检查其属性中的文件名。发生在我身上,如果windows隐藏文件的扩展名实际上是test.txt.txt,而我看到的只是test.txt。

于 2012-10-22T14:48:33.820 回答
0

将您的 for 循环更改为

for (string line; sourceFile.good();) {
    getline(sourceFile, line);

}

这样,您在 for 的条件部分检查流的有效性,并在流良好时获取该行。

于 2012-10-22T14:48:05.567 回答