我找到了以下代码,用于将整个文件读取为字符串。不幸的是,我不知道如何正确检查整个文件内容是否已加载。有is_open函数,但是它不提供所有信息。感谢您的帮助!
std::ifstream file(fileName);
std::string content = std::string((
std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
答案 0 :(得分:1)
您可以使用rdstate实用程序来检查(如果需要,可以重置)输入文件流的状态。
在您的程序中,它的工作原理如下:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::ifstream file("sample.txt");
std::string content = std::string((
std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
std::cout << "Reading status: " << file.rdstate() << std::endl;
if (file.rdstate())
std::cout << "Reading the file failed" << std::endl;
return 0;
}
第一个输出用于演示-如果一切顺利,file.rdstate
将为0。如果出了问题,它的值将是与系统有关的三个标志的总和。我建议您阅读引用的参考文献。
if
语句是可以在程序中使用的实际检查。您也可以在其中添加异常引发,甚至用assert替换if-两种策略,以防万一您实际上希望程序在读取文件失败时停止。使用assert时,您可以将if替换为
assert(!file.rdstate());
并添加<cassert>
标头。如果file.rdstate()
的值为0(解释为false
),则断言将引发并终止您的程序,因为您想要相反的选择-前面有一个否定项。
您只需指定一个不存在的文件名就可以轻松测试这些概念/想法,但是我也建议您this post获得更多的解释和测试思路,以澄清该概念。
答案 1 :(得分:0)
您正在寻找文件结尾或EOF标志。