Notes from C++ Primer

File State

Condition state is used to manage stream state, which indicates if the stream is available or recoverable.

State of stream is descripted by three member function: bad, fail, eof and good.

  • bad(): unrecoverable error. If the stream state is badbit, then it can't be used again. bad() returns true.
  • fail(): recoverable error. If the stream state is failbit, fail() returns true.
  • eof(): when stream meets the end-of-file. eofbit will be set. Also, the stream will be set failbit at the same time.
  • good(): the state of stream. If one of bad, fail, eof  is true, the good will return false, otherwise return true.

There're two operations to change the condition state: clear, setstate.

  • clear: reset the stream to be available.
  • setstate: open one of specified condition state.

The mangement of stream can be like this:

int ival;

// read cin and test only for EOF; loop is executed even if there are other IO failures
while(cin >> word, !cin.eof())
{
if(cin.bad()) // input stream is corrupted; bail out
throw runtime_error("IO stream corrupted"); if(cin.fail()) // bad input
{
cerr << "bad data, try again"; // warn the user
cin.clear(istream::failbit); // reset the stream
continue;
} // ok to process ival
...
}

Member function rdstate() returns the current state of stream. The below example also display how to set the state of stream:

// remember current state of cin
istream::iostate old_state = cin.rdstate(); cin.clear();
process_input(); // use cin cin.clear(old_state); // now reset cin to old state ... // sets both the badbit and the failbit
is.setstate(ifstream::badbit | ifstream::failbit);

Use of File Stream

Assume ifle and ofile is the string object storing the names of input and output files' namess.

string ifile = "inputFile.txt";
string ofile = "outputFile.txt";

Then the use of file stream is like this:

// construct an ifstream and bind it to the file named ifile
ifstream infile(ifile.c_str());
// ofstream output file object to write file named ofile
ofstream outfile(ofile.c_str());

Also, we can define unbound input and output file stream first, and then use open function to boud the file we'll access:

ifstream infile;                // unbound input file stream
ofstream outfile; // unbound output file stream infile.open("in"); // open file named "in" in the current directory
outfile.open("out"); // open file named "out" in the current directory

After opening the file, we need to check if it is successful being opened:

// check that the open succeeded
if(!infile){
cerr << "error: unable to open input file: "
<< infile << endl; return -1;
}

Rebound File Stream with New File

If we want to bound the fstream with another file, we need to close the current file first, and then bound with another file:

ifstream infile("in");          // open file named "in" for reading
infile.close(); // closes "in"
infile.open("next"); // open file named "next" for reading

Clear File Stream Status

Opening all file names in a string vector, one direct version is:

vector<string> files;
...
vector<string>::const_iterator it = files.begin();
string s; // string buffer // for each file in the vector
while(it != files.end()){
ifstream input(it->c_str()); // open the file // if the file is ok, read and "process" the input
if(!input)
break; // error: bail out!
while(input >> s) // do the work on this file
process(s);
++it; // increament iterator to get next file
}

More efficient way but with much more accurate operation version:

ifstream input;
vector<string>::const_iterator it = files.begin(); // for each file in the vector
while(it != files.end()){
input.open(it->c_str()); // open the file // if the file is ok, read and "process" the input
if(!input)
break; // error: bail out!
while(input >> s) // do the work on this file
process(s); input.close(); // close file when we're done with it
input.clear(); // reset state to ok
++it;
}

File Mode

When you use ofstream to open file, the only way to store existing data is to set the app mode explicitly.

// output mode by default; truncates file named "file1"
ofstream outfile("file1"); // equivalent effect: "file1" is explicitly truncated
ofstream oufile2("file1", ofstream::out | ofstream::trunc); // append mode: adds new data at end of existing file named "file2"
ofstream appfile("file2", ofstream::app);

File mode is the attribute of file, not stream

ofstream outfile;
// output mode set to out, "scratchpad" truncated because of after definition
outfile.open("scratchpad", ofstream::out);
outfile.close(); // close outfile so we can rebind it // appends to file named "precious"
outfile.open("precious", ofstream::app);
outfile.close(); // output mode set by default, "out" truncated
outfile.open("out");

Input and Output File的更多相关文章

  1. Filebeat之input和output(包含Elasticsearch Output 、Logstash Output、 Redis Output、 File Output和 Console Output)

    前提博客 https://i.cnblogs.com/posts?categoryid=972313 Filebeat啊,根据input来监控数据,根据output来使用数据!!! Filebeat的 ...

  2. Python Tutorial 学习(七)--Input and Output

    7. Input and Output Python里面有多种方式展示程序的输出.或是用便于人阅读的方式打印出来,或是存储到文件中以便将来使用.... 本章将对这些方法予以讨论. 两种将其他类型的值转 ...

  3. [20171128]rman Input or output Memory Buffers.txt

    [20171128]rman Input or output Memory Buffers.txt --//做一个简单测试rman 的Input or output Memory Buffers. 1 ...

  4. Java中的IO流,Input和Output的用法,字节流和字符流的区别

    Java中的IO流:就是内存与设备之间的输入和输出操作就成为IO操作,也就是IO流.内存中的数据持久化到设备上-------->输出(Output).把 硬盘上的数据读取到内存中,这种操作 成为 ...

  5. 标准库 - 输入输出处理(input and output facilities) lua

    标准库 - 输入输出处理(input and output facilities)责任编辑:cynthia作者:来自ITPUB论坛 2008-02-18 文本Tag: Lua [IT168 技术文档] ...

  6. [译]The Python Tutorial#7. Input and Output

    [译]The Python Tutorial#Input and Output Python中有多种展示程序输出的方式:数据可以以人类可读的方式打印出来,也可以输出到文件中以后使用.本章节将会详细讨论 ...

  7. C lang:character input and output (I/O)

    Xx_Introduction Character input and output is by more line character conpose of the text flow  Defin ...

  8. 7. Input and Output

    7. Input and Output There are several ways to present the output of a program; data can be printed i ...

  9. Compiler Error Message: CS0016: Could not write to output file 回绝访问

    Compiler Error Message: CS0016: Could not write to output file 'c:\Windows...dll' 拒绝访问 C:\Windows\Te ...

随机推荐

  1. 学习node.js 第2篇 介绍node.js 安装

    Node.js - 环境安装配置 如果愿意安装设置Node.js环境,需要计算机上提供以下两个软件: 一.文本编辑器 二.Node.js二进制安装包 文本编辑器 这将用来编写程序代码. 一些编辑器包括 ...

  2. python中subprocess模块

    subprocess  模块 subprocess称之为子进程,进程是一个正在进行的程序 子进程是由另一个正在运行的程序启动的程序,例如QQ聊天点击一个链接,打开了浏览器,那么浏览器称之为QQ的子进程 ...

  3. myeclise 安装

    安装.破解步骤都在gaobo百度云/工具/开发工具 安装后配置环境变量:

  4. Understanding ABI Files

    [Understanding ABI Files] ABI files can be generated using the eosio-cpp utility provided by eosio.c ...

  5. socketserver 模块并发

    socketserver是将socket封装的类. 实例: 服务端: import socketserver class Myserver(socketserver.BaseRequestHandle ...

  6. ucore-lab1-练习5report

    实验5--实现函数调用堆栈跟踪函数 需要完成kdebug.c中函数print_stackframe的实现,可以通过函数print_stackframe来跟踪函数调用堆栈中记录的返回地址. 一.函数堆栈 ...

  7. 给 Chrome浏览器 添加 Javascript小书签,查看当前页面全部加载的javascript文件及代码片段

    小书签又名 Bookmarklet,由英文单词 Bookmark 和 Applet 组合而来.简单地说,小书签就是把一段带有特定功能的 JavaScript 代码保存至收藏夹,当你需要的时候点击它来实 ...

  8. Django HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR

    使用django来获取用户访问的IP地址,如果用户是正常情况下 request.META['REMOTE_ADDR'] 可以获得用户的IP地址.但是有些网站服务器会使用ngix等代理http,或者是该 ...

  9. android 自定义 Application

    android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例 (singleton)模式的一个类.且application对象的生命周 ...

  10. 设置angular公共样式表

    一.现象 新创建的项目,是直接显示在src目录下的,假如会用到其它第三方的全局样式时,不能统一放在一个地方统一来管理,就会感觉有点乱. 二.解决 1.移动样式表. 在assets文件夹(该文件夹一般都 ...