C++文件的I/O操作

一、文件处理的基本概念

1、打开和关闭文件:对文件操作前需要准备相应的缓冲区,缓冲区管理变量和文件指针等,还需将文件和一个特定的变量联系起来,这称为打开文件。若程序不再使用某文件,应即时释放占用的缓冲区等资源,这称为关闭文件。

2、读文件:从文件中将数据复制到内存变量中。

3、写文件:将内存变量中的数据复制到文件中。

4、文件指针:由于文件的数据很多,所以在在读写时应指明对哪些数据进行操作。在流式文件中采用的方法是设立一个存放文件读写位置的变量,称为文件指针。

5、缓冲区:在内存中开辟的一片存储单元。

二、文件操作流程:首先要对头文件进行包含:#include<fstream.h>

1、文件的打开,先定义数据流对象,然后将该对象与数据文件联系起来。

2、文件的输入输出操作。

3、数据流的关闭(文件的关闭)。

三、文件的打开与关闭

1、定义文件流对象:如ifstream fin;

2、将文件流对象与文件关联:对象名.open(文件名,文件打开模式,文件的保护方式)

 

  文件的打开模式

模式

功能

ios::app

打开文件,在文件尾部添加数据

ios:ate

打开文件时将文件指针定位于文件尾部

ios:in

打开文件进行读操作

ios:out

打开文件进行写操作

ios:nocreate

若文件不存在,在打开操作失败

ios::noreplace

若文件存在,除非设置ios::ate或ios::app,否则打开失败

ios::trunk

若文件存在,将其长度截为0并清除原有内容

ios::binary

以二进制形式打开文件,默认为文本文件

 

   文件的保护方式,通常使用默认值

方式

功能

filebuf::openprot

兼容共享方式

filebuf::sh_read

允许读共享

filebuf::sh_write

允许写共享

filebuf::sh_none

独占方式

 

  文件流的状态

成员函数

功能

is_open()

流对象是否与文件关联

good()

刚进行的操作成功了返回true

fail()

刚进行的操作失败返了回true

bad()

若进行了非法操作返回true

eof()

操作时,位置指针到达文件尾返回true

 

 3、关闭文件流:文件流对象名.close();

四、文件的顺序读写操作

 

 1 /**********************************
 2 *将abc.txt的内容复制到123.txt中
 3 **********************************/
 4 #include <IOSTREAM>
 5 #include <FSTREAM>
 6 using namespace std;
 7 void main()
 8 {
 9     /*********************************
10     *打开文件进行读操作
11     *********************************/
12     fstream in("d:\\test\\abc.txt",ios::in);   
13     if (in.fail())
14     {
15         cout<<"can not open this file !"<<endl;
16         abort();
17     }
18     /**********************************
19     *打开文件进行写操作
20     ***********************************/
21     fstream out("d:\\test\\123.txt",ios::out|ios::app);
22     if (out.fail())
23     {
24         cout<<"can not open this file !"<<endl;
25         abort();
26     }
27 
28     char s;
29     while (!in.eof())
30     {
31         in.get(s);
32         cout<<s;
33         out.put(s);
34     }
35     in.close();
36     out.close();
37 }

 五、文件流的定位与文件的随机读写

 1、和输入流中的指针有关的操作:

  istream &istream::seekg(流中位置);

  istream &istream::seekg(偏移量,参照位置);

  streampos istream::tellg() ;

 流中位置、偏移量和streampos都是长整型量,并且以字节为单位;第一个将指针定位到绝对位置,第二个定位到相对位置,第三个返回一个长整型的值,用来表示当前指针的位置距离流开始位置的字节数。

2、参照位置的表示

  beg:相对于流开始的位置。

  cur:相对于当前位置指针指定的位置。

  end:相对于流的结尾位置。

例子,移动指针的操作:

  in.seekg(100,ios::beg); 将指针从流开始位置向末尾方向移动100个字节。

  in.seekg(-100,ios::cur);  将指针从当前位置向开始方向移动100个字节。

  in.seekg(-100,ios::end);  将指针从结尾位置向开始方向移动100个字节。
使用seekg函数将指针移动后,下次的读操作从移动后的位置开始。

3、和输出流中的指针有关的操作:

  ostream &ostream::seekp(流中位置);

  ostream &ostream::seekp(偏移量,参照位置);

  otreampos ostream::tellp() ;

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-10-08 16:25  不懂编程的程序员  阅读(1310)  评论(0编辑  收藏  举报