您的位置:首页 > 编程语言 > C语言/C++

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

2016-01-10 10:52 405 查看
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: 文件结尾
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: