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. Docking Windows Phone controls to the bottom of a StackPanel

    <Grid> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinit ...

  2. js快速排序

    function sort(arr){ if(arr.length<=1){ return arr; } var num = Math.floor(arr.length/2); var numV ...

  3. Learn ZYNQ (8)

    在zed的PS端运行spark(已成功): (1)设置uboot为sd卡启动rootfs: "sdboot=if mmcinfo; then " \                 ...

  4. 浏览器版本不支持页面示例 supper.html

    关键点在于<html>标签和js.<!--[if lt IE 10]>的配合 使用360浏览器兼容模式下查看:http://runjs.cn/code <!DOCTYPE ...

  5. 谢欣伦 - OpenDev原创教程 - 网络设备查找类CxNetworkHostFind & CxNetworkAdapterFind

    这是一个精练的网络设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxNetworkHostFind的使用如下: void ...

  6. JQuery中on()函数详解

    JQuery API中定义的on方法,专业名词很多,读起来并不是那么容易,而对于开发人员知道函数怎么使用就可以了.本文将JQuery的说明翻译如下: on(events,[selector],[dat ...

  7. windows计划任务+批处理文件实现oracle数据库的定时备份与恢复

    1.  备份: PS:2014-1-15 如果导出的dmp数据文件不大的话,就直接每天导出好了,不要只保存七天的数据.然后顶起通过winrar对文件进行打包,我发现dmp文件的压缩包还是很高的. 那么 ...

  8. ajax下载多文件,并且打包 C#中 ,文件批下载zip

    //提交要下载的文件 $.ajax({ url:"/sub/ZipFile.aspx", data:"paras="+datas, type: 'HEAD', ...

  9. HTML JQuery 技巧总结

    元素之间的操作 $(".level1").children()  获取到所有相邻的子元素$(".level1").children("a") ...

  10. andriod逆向实验截图