C++中fstream使用

#include<fstream>
using namespace std;

fstream 是给文件中(文件缓冲区)输入输出数据的类,它承了ifstream和ofstream.下面介绍一下它的一些常用的成员函数。

一、打开文件

void open(constchar* filename,int mode = ios::in,int access = 0);
//filename->文件名  mode -> 打开方式  access -> 打开文件的属性
mode方式
ios::ate以追加的方式打开文件
ios::app文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary以二进制方式打开文件,缺省的方式是文本方式
ios::in以读方式打开
ios::out以写方式打开
ios::nocreate不建立文件,文件不存在时打开失败
ios::noreplace不覆盖文件,如果文件存在时打开失败
ios::trunc如果文件存在,把文件长度设为0

也可以用 " | "把以上属性连接起来,如ios::in|ios::binary //以二进制输入方式打开文件

acess文件属性
0普通文件
1只读文件
2隐含文件
4系统文件

同样也可以用 " | "把以上属性连接起来,如2|4 //以只读和系统文件属性方式打开文件

注意:如果open函数只有文件名一个参数,则是以读/写普通文件打开。

二、读写文件

1 、文本文件的读写

用运算符 << 向文件输入;
用运算符 >> 从文件输出。

格式说明
dec格式化为十进制数值数据 输入和输出
endl输出一个换行符并刷新此流 输出
ends输出一个空字符 输出
hex格式化为十六进制数值数据 输入和输出
oct格式化为八进制数值数据 输入和输出
setpxecision(int p)设置浮点数的精度位数 输出

2、 二进制文件的读写

2.1 读文件


1.void get (char X); //获取一个字符给X
2.int get();  //将获取的字符返回
3.ifstream &get(char *buf,int num,char delim='\n');
//这种形式把文件中的字符读入buf指向的数组中去,
//直到读入了num个字符或遇到了由delim指定的字符,如果没使用 delim 这个参数,
//将使用缺省值换行符'\n'。
4.read(unsigned char *_Str, _Longlong _Count);
//read从文件中读取 _Count 个字符到 _Str 指向的缓存中

2.2 写文件

 put(char _Ch);//向流写入一个字符_Ch,
 write(const unsigned char*_Str, _Longlong _Count);
 //write向文件中写入 _Count 个字符到 _Str 指向的缓存中

三、检测EOF

int eof();

成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。

例:if ( in.eof() )
{
ShowMessage(“已经到达文件尾!”);
}

四、文件定位

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


istream &seekg(streamoff offset,seek_dir origin);
ostream &seekp(streamoff offset,seek_dir origin); 

streamoff 定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,
seek_dir 表示移动的基准位置,是一个有以下值的枚举:

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

这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。例:

file1.seekg(1234,ios::cur);    //把文件的读指针从当前位置向后移1234个字节 
file2.seekp(1234,ios::beg);    //把文件的写指针从文件开头向后移1234个字节

五、关闭文件

file.close();

打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如操作完文件不关闭文件可能会导致文件里的数据丢失。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值