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. MongoDB-C#驱动帮助

    查增改删 链接字符串 MongoDB超管+(admin) 单独库用户不加 static string mongoR = string.Format("mongodb://{0}(admin) ...

  2. SqlServer操作大全

    一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...

  3. vim 长句子中的上下移动

    当一个句子很长的时候,屏幕显示不下,就会分为多行,这个时候,你又想找到中间几行某部分的字母,怎么办?这个时候,先按下一个 g ,在按下 j / k ,就可以实现长句子的上下移动了.

  4. Java虚拟机各内存区域的位置及功能的介绍

    Java虚拟机运行时数据区: 相关区域介绍: 程序计数器: 功能:当前线程所执行字节码的行号指示器.若是Java方法记录指令地址,若为Native方法,则不记录 隔离性:线程隔离 Error:无 Ja ...

  5. ubuntu14.04下安装ngnix,mediawiki,nodebb,everything,gitlab

    本周折腾了以下几个东西,mediawiki(维基),nodebb(论坛),gitlab(私有git服务器). 本来的目的是搭建一个wiki,选用了mediawiki后,使用apache搭建好了. 搭论 ...

  6. WPF整理-为User Control添加依赖属性

    依赖属性 ".NET properties are nothing more than syntactic sugar over set and get methods." 我们知 ...

  7. 关于 apue.h 的使用方法

    unix中有很多地方使用到apue.h  .apue.h是作者自己写的一个头文件,这个文件怎么用,晚上有很多方法,但是经过尝试大多不好用. 经过本人尝试,可以把src.3e.tar.gz 的代码解压到 ...

  8. Python格式化字符串~转

    Python格式化字符串 在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作 ...

  9. 掌握Thinkphp3.2.0----标签库

    1.什么是内置标签?什么是标签扩展库? Cx.class.php 和 Html.class.php 2.怎么加载非内置标签,怎么使用? 两种方式加载 3.怎么扩展自定义的标签? 仿照Html.clas ...

  10. JQ第一天

    1.jQ中最常用对象是$对象,$是jQ的简写.只有将普通的Dom对象封装成jQ对象,才能使用其中方法,jQuery(document).ready()是允许多个的,$(fn)与$(document). ...