【发布时间】:2011-11-06 16:45:50
【问题描述】:
我想将文本文件的内容加载到vector<char>(或任何字符输入迭代器,如果可能的话)。目前我的代码如下所示:
std::vector<char> vec;
std::ifstream file("test.txt");
assert(file.is_open());
while (!(file.eof() || file.fail())) {
char buffer[100];
file.read(buffer, 100);
vec.insert(vec.end(), buffer, buffer + file.gcount());
}
我不喜欢手动使用缓冲区(为什么是 100 个字符?为什么不是 200 或 25 或其他什么?),或者这需要大量的行。代码看起来非常丑陋且非 C++。有没有更直接的方法?
【问题讨论】:
-
看看这个回复:stackoverflow.com/questions/132358/…。它在中间状态下完全符合您的要求,甚至从字符串(或
vector<char>)构建流。 -
@Diego - 把它写下来作为答案,我会接受的。这正是我想要的。
-
完成了,虽然它可能被视为重复问题?
-
回复
assert(file.is_open());:不要那样做!assert是一个可以扩展为空的宏(例如,发布模式),即使assert确实生成代码,它也无济于事。丢失的文件是用户错误,而不是程序员错误。一般准则:使用assert检测程序员错误。使用其他东西,anything else,用于用户错误。 -
@David Hammen - 我知道......目前这不完全是生产代码。不过我会修复问题中的代码。