【发布时间】:2021-02-26 01:08:18
【问题描述】:
我有如下代码。我觉得文件流没有到达文件末尾,因为ln_cnt的值不等于QGIS中显示的特征计数(即折线特征的数量)。
当 shapefile 很大时会发生这种不等式,因此我无法逐个计算特征,但我已经使用小型 shapefile 进行测试,并且我的代码运行良好。
polyline_class line_1;
int ln_cnt ++; // the counter for counting the lines that's read
ifstream reader("some_polyline.shp", ios::in | ios::binary);
while (!reader.eof()){
shp_read_pnt(&reader, &line_1);
ln_cnt ++;
}
cout << ".good() = " << reader.good() << "\n";
cout << ".bad() = " << reader.bad() << "\n";
cout << ".fail() = " << reader.fail() << "\n";
cout << ".eof() = " << reader.eof() << "\n";
cerr << "Error: " << strerror(errno);
reader.close();
结果是:
.good() = 0
.bad() = 0
.fail() = 1
.eof() = 1
Error: No error
真的有错误吗?
【问题讨论】:
-
在主题上,很多事情都可能发生在不会设置
errno的流中,因此对strerror没有影响。在这种情况下,看起来流确实到达了文件的末尾。不是errno关心的那种事情。这是在讨论 C,但最终结果将是相似的:Does EOF set errno? -
ln_cnt甚至没有在您发布的代码中初始化。如果您想要有用的答案,您应该发布一个可重现的示例。 -
int ln_cnt ++;不是有效的表达式。你需要int ln_cnt = 0;