C++中,输入输出采用流来进行,例如iostream库中的 cin 和 cout 。对文件进行读写操作也使用流。可以将文件与流关联起来,然后对文件进行操作。要将流与文件关联起来,必须像声明变量那样声明流,流是一种特殊的变量,称为“对象”,要对流进行处理,也必须使用专门处理流的函数才行。
C++提供的输入文件流(input file stream)变量的类名为 ifstream 。输出文件流(output file stream)变量的类名为 ofstream 。这两个类型都在 fstream 库中定义,因此,使用它们需要包含该 fstream 库。ifstream 和 ofstream 均为类,必须声明类变量才可进行相关操作,例如: 
  

1 ifstream in_stream;     //声明一个 ifstream 类型的流变量,名为 in_stream 。
2 ofstream out_stream;   //声明一个 ofstream 类型的流变量,名为 out_stream 。

  流变量要想对文件进行操作,必须连接到一个文件,也成为打开文件,需要用到 ifstream 类中的一个名为 open 的成员函数进行操作。例如:想要将输入流 in_stream 与文件 1.txt 连接,要执行如下操作:

   1 in_stream.open("1.txt");  
  进行该操作的前提是 1.txt 文件与该代码文件在同一目录下,如果不是在同一目录,需要加上绝对路径。
open函数可能因为很多原因而调用失败。例如:打开一个不存在的文件,open调用就会失败,这时候,程序有可能不会报错,但程序将执行我们非预期的操作。因此,要在执行文件打开操作之后,检测open调用是否成功。可以用名为 fail 的成员函数测试一个流操作是否失败。ifstream 和 ofstream 类都有名为 fail 的成员函数,该函数不取任何参数,返回一个 bool 类型的值,操作成功,返回假;操作失败,返回真。例如:要使用 fail 函数测试 open 调用是否成功,可以如下操作:
 
1 in_stream.open("1.txt");
2 if ( in_stream.fail() ){
3
4 cout << "File Open Failed." << endl;
5
6 exit(1);
7 }

在实际编程中,open 函数调用结束,一定要立即调用 fail 函数进行测试。

程序中的 exit 函数在 cstdlib 库中定义,因此,要使用该函数,需要在文件顶部包含 cstdlib 库。exit 函数参数为 0 时,表示程序正常运行结束。参数为 1 时,表示程序因为错误而退出运行。虽然程序中用 0 还是 1 都没有影响,但还是建议大家遵守上述约定。 
文件打开成功之后,就可以像 cin 那样来进行读取了,例如,文件 1.txt 中的内容为:
 
            200 5 10
 
可以通过如下代码将3个数字读取到num1, num2, num3中:
 1 in_stream >> num1 >> num2 >> num3;  
要向文件写入内容,也需要首先打开文件,这时,用的流变量是 ofstream 而非 ifstream。在文件未被打开的情况下,通过如下代码可像 cout 那样方便的将内容写入文件 2.txt 中:
1 ofstream out_stream;
2 out_stream.open("2.txt");
3 out_stream << 100 << endl
4 << 200 << endl
5 << 300 << endl;

注意:如果代码目录下没有 2.txt 这个文件,该段程序会创建一个名为 2.txt 的文件,然后写入数据。如果目录下原先就有一个 2.txt 的文件,用此种方式打开文件之后,会覆盖掉原先数据。如果想要在当前已存在文件的末尾追加数据,可采用如下方式打开文件:

 1 out_stream.open("1.txt", ios::app);  
open 函数中第二个实参:ios::app 是一个特殊常量,在 iostream 库中定义,要使用它,要包含 iostream库。
通过一个例子,来集中使用文件输入输出流的操作。功能为:从 1.txt 文件中读取3个数据,将它们的和存放到 2.txt 当中。

C++之流与文件的更多相关文章

  1. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  2. java io流 对文件夹的操作

    java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...

  3. java io流 创建文件、写入数据、设置输出位置

    java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...

  4. java io流(字符流) 文件打开、读取文件、关闭文件

    java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public sta ...

  5. C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

    迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器 ...

  6. [Java] 通过文件流拷贝文件

    package test.stream; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  7. ifstream 流 判断文件是否结尾的函数eof(.xml

    pre{ line-height:1; color:#800080; font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-wei ...

  8. Java 字符流实现文件读写操作(FileReader-FileWriter)

    Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...

  9. [转] linux系统文件流、文件描述符与进程间关系详解

    http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括:     ...

随机推荐

  1. Xcode8 更新后的坑及常见错误

    1.Xcode更新后,command + / 注释整行代码不起作用了,可以终端运行sudo  /usr/libexec/xpccachectl,并重启电脑 可以参考http://blog.csdn.n ...

  2. html5和css3学习笔记

    HTML5针对移动端,移动端的浏览器主要是chrome,是webkit内核; app(applicatin):应用; native app:原生的app sadsadsadad 单标签可以省略结尾标记 ...

  3. css记录

    padding padding-top是在绿色边框内,从顶部向下移20像素位置,默认padding-top 为0时,红色边框为20像素高,通过padding-top属性,为顶部增加了20像素,这时顶部 ...

  4. 使用功能强大的插件FastReport.Net打印报表实例

    我第一次使用FastReport插件做的功能是打印一个十分复杂的excel表格,有几百个字段都需要绑定数据,至少需要4个数据源,而且用到横向.竖向合并单元格. 我不是直接连接数据库,而是使用Regis ...

  5. hibernate 异常:could not execute statement

    错误信息: JDBC exception on Hibernate data access: SQLException for SQL [n/a]; SQL state [72000]; error ...

  6. html文本的基本设置

    一.字体属性: 选择字体:font-family:value,value....指定字体的显示,按照顺序直到能够匹配 字体的大小:font-size:39px: 字体加粗:font-weight:bo ...

  7. Mybatis学习记录

    参考资料: <深入理解mybatis原理> MyBatis的架构设计以及实例分析

  8. SSH配置中出现问题

    问题1:org.springframework.beans.factory.NoSuchBeanDefinitionException: org.springframework.beans.facto ...

  9. (转)微信小程序破解IDE

    1.IDE下载 微信web开发者工具,本人是用的windows 10 x64系统,用到以下两个版本的IDE安装工具与一个破解工具包: wechat_web_devtools_0.7.0_x64.exe ...

  10. jQuery $ 第二个参数的用法

    jQuery(selector, [context]),相当于 $(context).find(selector) 或者 context.find(selector) $('div').each(fu ...