【发布时间】:2013-04-09 11:52:05
【问题描述】:
代码如下:
string fname = "/home/jack/example.csv";
ifstream csvin(fname.c_str());
if (csvin.eof()) {
do_something;
}
我的问题是:eof() 在什么情况下返回 true。我有以下选择:
- 文件不存在。
- 文件为空。
- 文件不存在或为空。
不幸的是documentation 没有帮助,因为我不知道eofbit error state flag 的意思。我也不明白End-of-File is reached in the sequence associated with the stream 是什么意思。我假设 c_str() 返回一些迭代器,如果它已经被某些东西使用它可能已经到达终点。但是,我对c_str() 的结果是新鲜的简单情况感兴趣,如果文件不存在它将返回什么,如果文件为空,它将返回什么?
已编辑
我只想知道上面给出的代码在两种情况下返回了什么:
- 文件不存在。
- 文件为空。
【问题讨论】:
-
通常是这样写的:while(!csvin.eof()) {do_something();}
-
@Gearoid 否。除非“通常”,否则您的意思是“通常,在损坏的代码中”
-
您的文档导致您陷入了循环,因为该网站很容易这样做。将此站点视为您的第一个来源。 en.cppreference.com/w/cpp/io/basic_ios/eof
-
如果文件不存在,
csvin无效,你不应该首先尝试调用eof()... -
@DevSolar:
csvin将是一个完全构造的对象,因此在其上调用任何方法(包括eof)都是明确定义的(尽管在eof的情况下无用)。失败的构造函数将设置失败位,这将阻止需要有效流的进一步操作成功。