- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream file("out.txt", ios_base::app);
file.seekg(0, ios_base::beg);
char buffer[100];
if( !file.getline(buffer, 99) )
cout << "file.failbit " << boolalpha << file.fail() << " file.eofbit " << file.eof()
<< '\n'
<< "file.badbit " << file.bad() << " file.goodbit " << file.good() << '\n';
}
输出
最佳答案
该标准禁止您读取仅为输出而打开的文件。来自 basic_filebuf
的第 27.9.1.1.3 段(fstream
的底层实现的一部分):
If the file is not open for reading the input sequence cannot be read.
因此,当尝试从仅为写入而打开的文件中读取时,人们会期望看到 failbit
。该标准还指出,每当 getline
到达输入序列的末尾时,就会设置 eofbit
。由于您实际上有一个空的输入序列(即您无法读取的文件),因此第一次调用 getline 也会设置 eofbit
。在标准中,底层流缓冲区下溢。 basic_streambuf::underflow()
在失败时返回 traits::eof()
(参见 27.6.3.4.3 第 7-17 段)。
要解决此问题,请将 ios_base::in
添加到文件的打开模式。
关于c++ - 在尝试读取仅为输出而打开的文件时,为流设置了 eofbit 标志。这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776416/
这段代码永远循环: #include #include #include int main(int argc, char *argv[]) { std::ifstream f(argv[
假设给定一个包含数字列表的非空文本文件, 1 2 3 4 5 然后我们用 std::ifstream 将它们读入数值类型(int、double 等)以及 字符 int main() { ifs
#include #include using namespace std; int main() { fstream file("out.txt", ios_base::app);
编辑:我原来的测试程序代码中有一个细微的错误:" char=" #include using namespace std; void info( int aRelativePos, istream
我想知道为什么 istream::get 将 failbit 和 eofbit 设置在一起。 std::getline 的行为不同:它在遇到文件末尾时设置 eofbit,在您尝试读取文件末尾时设置 f
考虑以下代码: ifstream in; try { in.exceptions ( ifstream::failbit | ifstream::badbit );
我正在尝试阅读尽可能多的 std::complex尽可能从文件(或任何 std::istream )。如果操作失败,我会检查 ios::eof()。如果没有设置,我就假设解析数据有错误,我可以向用户报
我是一名优秀的程序员,十分优秀!