【发布时间】:2010-02-21 09:43:36
【问题描述】:
考虑下面的 C++ 程序,它接受一个文件并打印每一行。这是一个更大程序的一部分,我稍后会根据我看到的内容将其附加到文件中。
#include <fstream>
using std::fstream;
#include <iostream>
#include <string>
using std::string;
int main()
{
fstream file("file.txt", fstream::in | fstream::out | fstream::app);
string line;
while (std::getline(file, line))
std::cerr << line << std::endl;
return 0;
}
现在应用这个版本的file.txt(第一行一个单词,后跟一个换行符):
Rain
在我的机器 (Snow Leopard) 上,这不会打印任何内容。仔细检查,第一次调用 getline 失败。奇怪的是,如果我添加第二行,它也会失败:仍然没有打印任何内容!
谁能解开这个谜?
【问题讨论】:
-
你的程序适合我,所以它可能是你环境中的一个错误。您是否尝试过以只读方式打开,即
fstream::in? -
在这里也可以正常工作,按照 Earwicker 所说的做,并检查您的文件是否被实际打开。
-
顺便说一句,您将文本发送到
std::cerr-std::cout对于实际输出来说会更正常。std::cerr用于错误报告(如我的回答)。 -
@Charles,Manuel - 你真的尝试过吗?我刚刚在 Leopard 的 g++ 上构建了上面的确切源代码,并且仅在删除
::app标志时才有效。 -
我在 Windows Vista + MSVC 2008 上试过
标签: c++ stl cross-platform fstream