文件流到 读取和写入

来源:互联网 发布:方舟生存进化优化好么 编辑:程序博客网 时间:2024/05/17 00:05

 


C++把文件看作字符序列,即字符流。文件可分为文本文件和二进制文件。
fstream.h头文件包括三个流类:输入文件流类ifstream、输出文件流类ofstream和输入/输出文件流类fstream。函数中包含的头文件,最好要把引号引用的头文件写在前面。
文件的打开与关闭
1.使用open( )函数打开文件
open( )函数是上述三个流类的成员函数,其原型定义在fstream.h中。打开文件应先定义一个流类的对象,然后使用open( )函数打开文件。
open( )函数原型为:
    void open(const unsigned char*,int mode, int access=filebuf::openprot);
    open()函数第一个参数用来传递文件名,第二个参数决定文件将如何被打开,这些参数是定义在抽象类中,常用的有:
ios::app  // 使输出追加到文件尾部
ios::ate  // 查找文件尾
ios::in  // 打开一个文件进行读操作
ios::out  // 打开一个文件进行写操作
ios::nocreate  // 打开一个已有文件,如该文件不存在,则打开失败
ios::noreplace  // 若文件存在,导致打开失败
ios::ate  // 文件打开时,文件指针位于文件尾
ios::trunc  // 如果文件存在,则清除该文件的内容,文件长度压缩为0
ios::binary  // 以二进制方式打开文件
第三个参数access的值决定文件的类别。分下列5种情况:
0         普通文件
1         只读文件
2         隐含文件
4         系统文件
8         备份文件
对于类ifstream,mode的缺省值为ios::in,access的缺省值为0;而对于类ofstream,mode的缺省值为ios::out,access的缺省值为0。
例如,用读方式打开一个文本文件file.txt方法如下:
fstream A;  // 创建对象
A.open("file.txt",ios::in);
以输出文本方式打开一个文件的方法如下:
ofstream outfile;  // 创建对象
outfile.open("file.txt",ios::out);   // 打开输出文件
以输出二进制数据方式打开一个文件的方法如下:
ofstream outfile;  // 创建对象
outfile.open("file.txt",ios::out|ios::binary); 
打开普通的输出文件file.txt的方法如下:
ofstream out; 
out.open("file.txt",ios::out,0);
或,         
ofstream out.open("file.txt");
实现将数据从数据文件提取到内存区的操作,要使用ifstream类的函数成员open( ),将输入文件流与一个特定的存储区域联系起来。
以提取文本数据的方式打开一个文件的方法如下:
ifstream in1;  // 创建对象
in1.open("file1.txt",ios::in);  // 打开文件
以提取二进制数据的方式打开一个文件的方法如下:
ifstream in2;  // 创建对象
in2.open("file2.txt",ios::in| ios::binary);  // 打开文件
2.使用close( )函数关闭文
函数成员close( )的作用是关闭一个磁盘文件与输入/输出文件流的联系。使用完一个文件后,应该把它关闭。close( )函数是流类中的成员函数,它不带参数,不返回值。
调用close( )函数的格式如下:
             流对象名. close( );
例如:     
out. close( );    // 关闭与流out相联接的文件
close( )函数一次只能关闭一个文件,文件使用完后应及时关闭。
文件的读写
文件的读写分文本文件与二进制文件两种情况,在含有文件操作的程序中,必须包含头文件fstream.h。
对于打开的文件,可以使用输入/输出流的成员函数进行读写操作,这些函数有get( )、put( )、read( )、和write( )函数等。对于文本文件,也可以使用运算符“<<”与“>>”进行读写操作。
read( )函数在istream类中定义,其函数原型如下:
              istream&read(unsigned char *buf,int n);
其中第一个参数是一个指针,它指向要读入数据的起始地址;第二个参数是一个整数值,它是要读入的数据的字节(字符)数。
write( )函数在ostream类中定义,其函数原型如下:
ostream& write (const unsigned char *buf,int n);
此函数可以从buf所指的缓冲区把n个字符(字节)写到输出流中。
此外,在文件结束处有一个标志位,记为EOF(End OF);采用文件流方式读取文件时,使用成员函数eof( ),可以检测到这个结束符,文件结束时其返回值为真。
为了实现C++文件的随机读写操作,输入/输出流类库提供了定位文件读写指针的成员函数。
istream类定位读指针的成员函数如下:
istream& istream::seekg(流中位置) ;
表示移动指针到参数所指的绝对位置(相对于文件开始位置的字节数)。
istream& istream::seekg(偏移量,参照位置) ;
表示移动指针到偏移于第二个参数所指位置的一定位置上,偏移量由第一个参数值给出,第二个参数是ios类中的一个枚举量:
enum seek_dir
{
beg;  // 相对于文件的开始位置
cur,  // 相对于文件指针的当前位置
end  // 相对于文件尾
};
istream& istream::tellg( ) ;// 返回指针的绝对位置
ostream类对于写指针提供的成员函数如下:
ostream&ostream::seekp(流中位置) ;
表示移动指针到参数所指的绝对位置。
ostream& ostream::seekp(偏移量,参照位置) ;
表示移动指针到偏移于第二个参数所指位置的一定位置上,偏移量由第一个参数值给出。
ostream& ostream::tellp( ) ;  // 返回指针的绝对位置
用于读的文件指针必须处于文件头与文件尾之间,用于写的文件指针则可指向文件尾之后。
 

 

由于IE浏览器升级禁用了alt+x快捷键,请用alt+q快捷键来快速进入写说说入口
正在加载中...
原创粉丝点击