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. 转:ibatis动态sql

    转:ibatis动态sql 直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的 IF-ELSE条件语句和一连串 ...

  2. Vuforia判断当识别追踪的对象

    方法一,如果有多个识别对象,在Update中循环识别对象数组,获取TrackableBehaviour组件 foreach (var item in trackObjects) { var mTrac ...

  3. window自动任务实现数据库定时备份

    原理:利用window定时任务定时cmd加载mytask.bat文件,bat运行php.exe程序编译运行mytask.php文件 ,从而实现了数据库的备份 mytask.bat 内容: D:\php ...

  4. Jvascript简介

    一.Javascript就是我们所说的脚本语言.它不同于C++/java等语言,它更加灵活! 正因为其灵活性,没有那么多的规章制度,也是我们容易学的地方,但很多时候也是 令人无奈的地方! 二.我们要知 ...

  5. Docker compose学习笔记

    一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...

  6. mysql在同一个表上查询和更新

  7. 一起来做chrome扩展《基础介绍》

    首先说明,chrome的扩展并不它的插件,网上很多说写插件,其实都是说的扩展.写扩展并不复杂,只要根据chrome提供的一系列的API进行就可以实现很多的功能.只是对API的学习是有代价的,加上国内访 ...

  8. PostgreSQL JSON函数

    https://www.postgresql.org/docs/9.6/static/functions-json.html PostgreSQL 9.6.1 Documentation Prev U ...

  9. jquery的each()详细介绍

    each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等在javaScript开发过程中使用$ ...

  10. Python学习【第三篇】Python变量

    变量 声明变量 #!/usr/bin/env python name = "Bourbon" 上述代码声明了一个变量,变量名为:name,变量的值为:"Bourbon&q ...