阅读文件内容与ifstream打开
问题描述:
我有一个读取文件的问题,在Windows上打开fstream。阅读文件内容与ifstream打开
文件成功打开,它没有错误,但循环getline没有内容。
除此之外样本完美运行,并打印整个文件内容
std::copy(std::istream_iterator<std::string>(file), std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(std::cerr, "\n"));
在Linux上一切都是完美的,相同的文件,同样的代码,函数getline循环读取所有。
的Visual Studio 2013
编辑:
我忘了提,我有这个代码的小线周期之前,函数getline
std::cout << file.rdbuf();
在Linux上这一行只是打印文件内容,在它不仅打印,但使文件无法访问到std::getline
答
getline()
从输入流中提取字符,直到达到换行符或delim
这也是一个字符,但getline不仅仅是提取,getline放弃了删除字符。检查您的文件,看看您是否以newline character
开头,这意味着您在第一条以外的文件中启动的文件。如果是这样,
while (std::getline(file, str)) {
strings.push_back(str);
}
会始终iterate only 1 time
,没有返回字符,因为它只是丢弃换行符。
while (std::getline(file, str) || !file.eof) {
strings.push_back(str);
}
现在,如果它跑入deliminating character
,还检查文件的结尾已经达到。
答
的问题是在呼唤
std::cout << file.rdbuf();
while(std::getline)
之前在Windows上线使得文件无法访问到std ::函数getline
+0
调用它的原因是什么? – Mikhail
while循环后,因此,如果您打印'strings.size()'你得到零? – NathanOliver
@NathanOliver yep – tty6
该文件是一个文本文件吗?第一个字符是0x1A?在Windows中,有特殊字符或字节值表示文件状态结束。如果您的文件在开头*处包含这些文件,并且您没有将文件作为二进制文件打开*,则Windows操作系统将返回文件结尾状态。 –