C/C++文件操作2——fstream类

来源:互联网 发布:lua 5.1 windows 编辑:程序博客网 时间:2024/05/20 10:24

C++对文件的操作是通过stream的子类fstream(文件流)来实现的,须加入fstream头文件。


1、打开文件

fstream file;file.open("a.txt", mode, access);

mode是打开文件的方式,有如下几种:

ios::app:    以追加的方式打开文件 
ios::ate:    文件打开后定位到文件尾,ios:app就包含有此属性 
ios::binary:    以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 
ios::in:      文件以输入方式打开 
ios::out:    文件以输出方式打开 
ios::nocreate:  不建立文件,所以文件不存在时打开失败  
ios::noreplace: 不覆盖文件,所以打开文件时如果文件存在失败 
ios::trunc:   如果文件存在,把文件长度设为0

多种方式用‘|’连接,如ios::out|ios::binary


access是访问或建立的文件属性

0:普通文件,默认情况
1:只读文件
2:隐含文件
4:系统文件


2、读写文件

1)文本文件的读写

文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。示例如下:

file1.put('a');//向文件写入一个字符'a'char ch;int nch;char str[50];file1.get(ch);//读取一个字符nch = file1.get();//读取一个字符file1.get(str, 50, 'a');//从文件中读取字符串str,当遇到字符'a'或者读取了50个字符时停止


利用以下操作符可以格式化输入输出
操纵符                                     功能                               输入/输出
dec                        格式化为十进制数值数据                输入和输出
endl                       输出一个换行符并刷新此流             输出
ends                      输出一个空字符                              输出
hex                        格式化为十六进制数值数据             输入和输出
oct                         格式化为八进制数值数据                输入和输出
setpxecision(int)    设置浮点数的精度位数                   输出
比如要把123当作十六进制输出:file1<<hex<<123,要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。
2)二进制文件的读写

char* str1 = "asdf";char str2[5] = {0};file1.read(str2, 5);//读取字符串到str2中file2.write(str1, strlen(str1));//写入字符串到文件中

3、关闭文件
打开的文件使用完成后一定要关闭,fstream提供了成员函数close来完成此操作,如:file.close();就把file相连的文件关闭。不执行关闭操作可能造成文件数据丢失。

4、检测EOF
file.eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。

5、文件定位
  C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg是设置读位置,seekp是设置写位置,二者针对二进制文件操作。它们最通用的形式如下:

istream &seekg(streamoff offset,seek_dir origin);ostream &seekp(streamoff offset,seek_dir origin);
偏移量offset表示移动的字节数,seek_dir表示移动的基准位置,取下列值:

ios::beg:  文件开头
ios::cur:   文件当前位置
ios::end:  文件结尾

0 0