设为首页 加入收藏

TOP

2.2.3 读/写文件
2013-10-07 14:09:39 来源: 作者: 【 】 浏览:63
Tags:2.2.3 文件

2.2.3  读/写文件

除了用设备进行输入/输出之外,更多的时候,程序需要跟文件进行数据的输入/输出,这时候我们就需要对文件进行读/写操作:从文件读取数据到应用程序进行处理;将数据写入文件进行保存。C++(www.cppentry.com)提供了两个类ofstream和ifstream以实现应用程序跟文件之间的数据交流。

ofstream和ifstream是由<fstream>头文件定义的两个类,分别负责数据的输出和输入。可以分别创建这两个类的对象,通过这些对象提供的函数打开文件,从而将对象跟某个具体的文件联系起来,再利用插入符"<<"和提取符">>"对这些对象进行操作。例如,下面这段程序使用ofstream和ifstream两个类实现文件的读/写:

  1. #include "stdafx.h"  
  2. #include <iostream> 
  3. // 引入输入/输出文件流对象需要的头文件  
  4. #include <fstream> 
  5.  
  6. using namespace std;  
  7. // 主函数  
  8. int _tmain(int argc, _TCHAR* argv[])  
  9. {   
  10.     // 定义变量,保存程序中的数据  
  11.     int nYear, nMonth, nDate;  
  12.     // 尝试打开Date.txt文件,并将其连接到输入文件流fin  
  13.     ifstream fin("Date.txt");  
  14.     // 如果成功打开Date.txt文件,则从文件中读取内容  
  15.     if( !fin.bad() )          
  16.     {  
  17.         // 忽略文件中第1行的提示信息  
  18.         fin.ignore(256,'\n');  
  19.         // 用提取符“>>”从文件输入流fin中读取记录的数据,并保存到相应的变量  
  20.         fin>>nYear>>nMonth>>nDate;  
  21.         // 将数据显示到屏幕  
  22.         cout<<"文件中的日期是"  
  23.             <<nYear<<"-"<<nMonth<<"-"<<nDate<<endl;  
  24.         // 读取完成后,关闭文件  
  25.         fin.close();  
  26.     }  
  27.     else  
  28.     {  
  29.         // 如果文件打开失败,则提示错误信息  
  30.         cout<<"无法打开文件并进行读取"<<endl;  
  31.     }  
  32.       
  33.     // 提示用户输入新的数据并将其写入文件  
  34.     cout<<"请输入当前日期(年月日):"<<endl;  
  35.     // 从用户屏幕获取用户的键盘输入并保存到相应的变量中  
  36.     cin>>nYear>>nMonth>>nDate;  
  37.  
  38.     // 尝试打开文件Date.txt,并将其连接到输出文件流fout中  
  39.     ofstream fout("Date.txt");  
  40.     // 如果成功打开Date.txt文件,则将用户输入的数据写入文件  
  41.     if( !fout.bad() )  
  42.     {  
  43.         // 利用插入符“<<”将数据写入文件输出流fout中,  
  44.         // 也就是将数据写入文件中  
  45.         fout<<"用户输入的当前日期是:\n"  
  46.             <<nYear<<" "<<nMonth<<" "<<nDate;  
  47.         // 写入完成后,关闭文件  
  48.         fout.close();  
  49.     }  
  50.     else  
  51.     {  
  52.         // 如果无法打开文件,则提示用户信息  
  53.         cout<<"无法打开文件并进行写入"<<endl;  
  54.     }  
  55.  
  56.     return 0;  
  57. }  

在这段程序中,首先创建了一个输入文件流ifstream的对象fin,并利用它的构造函数将其连接到一个文本文件Date.txt。所谓构造函数,就是这个对象创建时所执行的函数。这里,使用"Date.txt"作为参数来调用这个构造函数,实际上就是使用这个文件创建fin对象。除此之外,还可以使用fin所提供的open()函数来打开一个文件。当利用fin成功打开一个文件之后,就可以利用提取符">>"从fin中提取各种数据。">>"会以空格为分隔符逐个从文件中读取数据,并将其保存到相应的数据变量中。例如,如果文件中的内容如下:

  1. 用户输入的当前日期是:  
  2. 1983 7 3 

默认情况下,fin总是从文件的开始部分进行读取的,为了直接读取第2行的内容,可以使用"fin.ignore(256,'\n');"忽略第1行的内容,将读取位置跳转到第2行。然后,通过提取符">>"将第2行用空格分割的三个数据分别提取并保存到三个变量中。

同样,为了将数据写入文件,需要创建一个输出文件流ofstream的对象fout,然后通过它的构造函数或open()函数来打开一个文件,将这个文件和fout对象连接起来,然后通过插入符"<<"将数据插入fout对象,这样就实现了将数据写入它所关联的文件中的目的。整个过程如图2-9所示。

 
图2-9  文件/读写
除了上面所介绍的文本文件的读/写之外,C++(www.cppentry.com)所提供的fstream还可以读/写二进制文件,甚至可以重新定义"<<"和">>",实现特殊的读/写操作。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2 基本输入/输出流 下一篇两道出现频率超高的C++笔试题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: