提问人:samw 提问时间:2/9/2023 更新时间:2/9/2023 访问量:71
将 ifstream 转储到 cout 时如何处理空文件?
How do I handle empty files when dumping ifstream to cout?
问:
我正在尝试将文件的内容转储到 .cout
#include <iostream>
#include <fstream>
int main(int argc, char** argv)
{
if (argc > 1) {
std::ifstream fin(argv[1]);
if (fin) {
std::cout << "---file contents---\n";
std::cout << fin.rdbuf();
std::cout << "---end contents---\n";
} else {
std::cout << "The file does not exist\n";
}
}
else {
std::cout << "Usage: " << argv[0] << " FILE\n";
}
if (std::cout.good()) {
return 0;
}
else if (std::cout.fail()) {
return 1;
}
else {
return 2;
}
}
当输入文件为空时,此代码无法按预期工作。它打印初始的“---file contents---”,但从不打印尾随的“---end contents---”。调试后,我发现应用程序没有崩溃,而是处于错误状态(返回代码为 1)。std::cout
如何在不进入错误状态的情况下打印空文件的内容?cout
答:
1赞
Some programmer dude
2/9/2023
#1
此运算符<<
参考(列表中的重载编号 10)解释了这一切:
如果未插入任何字符,则执行 .
setstate(failbit)
由于输入文件为空,因此没有要插入到输出流中的字符。并且设置好了。failbit
您需要添加一个特定的检查,用于failbit
std::cout << fin.rdbuf();
以查看输入文件是否为空。
评论
0赞
samw
2/9/2023
是的,情况似乎是这样。感谢您的帮助!
评论
cout << fin.rdbuf()
rdbuf()
badbit
rdbuf()
rdbuf()