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. PHP操作字符串 截取指定长度字符 移除字符串两侧 左侧 右侧指定字符 或空白字符 替换字符

    trim() trim() 函数移除字符串两侧的空白字符或其他预定义字符. <?php $str = "Hello World!"; echo $str . "&l ...

  2. 第三方登录分享功能-ShareSDK for iOS适配问题记录

    最近app里需要添加第三方授权登陆和分享的功能,选择了ShareSDK,参考了ShareSDK文档对该SDK进行了适配,但遇到了一些问题 1.问题:分享功能点击不跳转  原因:适配iOS9添加白名单 ...

  3. android studio增量更新

    一.概述 1.1 概念 增量更新即是通过比较 本机安装版本 和 想要安装版本 间的差异,产生一个差异安装包,不需要从官网下载并安装全量安装包,更不需要将本机已安装的版本下载,而仅仅只是安装此差异安装包 ...

  4. 更换app开发者账号

    在开源中国上面有一个答案,http://www.oschina.net/question/2307266_237220 下面是我的执行步骤 首先在iTunes Connect中找到要更换开发者账号的a ...

  5. php字符串笔记

    1.explode:英语的意思就是爆炸,此函数用于将字符串切成数组 2.implode:英语意思是向心聚,将数据拼成字符串. 3.substr:截取字符串,从指定位置截取指定长度,不指定就到最后 4. ...

  6. 安卓中級教程(10):@InjectView

    package com.example.android.db01; import android.app.Activity; import android.content.ContentValues; ...

  7. [IT新应用]家用NAS,自建“360云盘”

    360云盘也快要离开了.同事中有人开始尝试使用群晖NAS.西数的NAS来自建云了. [功能对比] [选择参数] [口碑评价]

  8. Yii源码阅读笔记(三十四)

    Instance类, 表示依赖注入容器或服务定位器中对某一个对象的引用 namespace yii\di; use Yii; use yii\base\InvalidConfigException; ...

  9. 基于apache的tomcat负载均衡和集群配置

    最近不是很忙,用零碎时间做点小小的实验. 以前公司采用F5负载均衡交换机,F5将请求转发给多台服务器,每台服务器有多个webserver实例,每个webserver分布在多台服务器,交叉式的分布集群. ...

  10. How to only capute sub-matched character by grep

    File content: <a href="ceph-0.80.9-82.1.x86_64.rpm"><img src="/icons/rpm.gif ...