一 stream类

fstream顾名思义就是文件流,所以它也是以stream类为基础的。stream类有两个重要的运算符:

1.插入器(<<)

向流输出数据。比如:

cout<<"stdout"<<"\n";


2.析取器(>>)

从流中读取数据。比如:

cin>>a;

在c++中文件操作通过stream的子类fstream实现,要使用fstream就要引用头文件fstream。


二 打开文件(open()函数)

1.open()函数的原型是:

void open(const char* filename,int mode,int access);


2.参数:

filename:要打开的文件名
mode:要打开文件的方式
access:打开文件的属性


3.打开文件的方式

在类ios(所有流式I/O类的基类)中定义,有如下值:

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

可以用"|"把以上的值连起来。


4.打开文件的属性取值是:

0:普通文件,打开访问
1:只读文件
2:隐含文件
4:系统文件 

也可以用"|"连起来,还可以加起来,比如"3"表示以只读和隐含文件属性打开


三 关闭文件

用close()成员函数完成关闭操作。


四 读写文件

读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了,也可以使用getline等函数;而对于二进制的读取就要复杂些。

二进制文件的读写

1.put();

put()函数向流写入一个字符,其原型是ofstream &put(char ch),使用也比较简单,如

file1.put('c');

就是向流写一个字符'c'。


2.get();

get()函数比较灵活,有3种常用的重载形式:
一种就是和put()对应的形式:

ifstream &get(char&ch);

功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。

file2.get(x);

表示从文件中读取一个字符,并把读取的字符保存在x中。
另一种重载形式的原型是:

int get();

这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如

x=file2.get();

和上例功能是一样的。
还有一种形式的原型是:

ifstream &get(char *buf,int num,char delim='\n');

这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符'\n'。


3.读写数据块

要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:

read(unsigned char *buf,int num);
write(const unsigned char *buf,int num);

read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned char *,有时可能需要类型转换。


五 检测EOF

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

int eof();


六 文件定位

和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 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:

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

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

例如:

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

C++中fstream的用法相关推荐

  1. fstream的用法

    解析ifstream 与ofstream的用法     2007-01-29 10:23:17 大 中 小 这个小知识点迷糊了很久了,前段时间始终没有搞清楚,今天又拿过来看的时候好象明白了点..... ...

  2. mysql中change用法,mysql 中alter的用法以及一些步骤

    mysql 中alter的用法以及一些方法 在用到alter的时间,查到了这个文章,就copy下来了,详细进入下面链接: MySQL之alter语句用法总结 1:删除列 ALTER TABLE [表名 ...

  3. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

  4. 【C++】C/C++ 中 static 的用法全局变量与局部变量

    C/C++ 中 static 的用法全局变量与局部变量 目录 1. 什么是static? 1.1 static 的引入 1.2 静态数据的存储 2. 在 C/C++ 中static的作用 2.1 总的 ...

  5. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  6. python中str的index什么意思_python中index的用法是什么

    index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如:>>> t=tuple('Allen') >>> t ('A', 'l', ...

  7. php foreach是什么,php中foreach的用法是什么

    php中foreach的用法是:[foreach ($array as $value) {要执行代码;}],每进行一次循环,当前数组元素的值就会被赋值给$value变量,在进行下一次循环时,将得到数组 ...

  8. java中的基本用法

    java中的基本用法 关键字:专门用途的字符串 所有java关键字都是小写英文 标识符 java常量 java变量 ■ 作用域:起作用的区域■ 使用前必须先声明,在赋值.使用变量名访问这块区域 jav ...

  9. Java中getResourceAsStream的用法

    Java中getResourceAsStream的用法 首先,Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String p ...

最新文章

  1. Python爬虫入门教程 21-100 网易云课堂课程数据抓取
  2. Segment公司--整合数据进行分析
  3. 系统延时任务及定时任务
  4. bugku 管理员系统 后台代码_不会吧,这也行?iOS后台锁屏监听摇一摇
  5. 理解lambda在linq中的应用
  6. 王道 —— 中断和异常
  7. Python:输出系统所有的PID
  8. 基于单片机PID电机调速控制设计-基于单片机LED条屏显示温度和时间设计-基于单片机PM2.5雾霾检测处理控制设计-基于单片机SHT11温湿度采集报警系统设计-基于单片机8155秒表计时器系统设计
  9. 智慧农业技术解决方案
  10. vscode 快速新建一个HTML文件
  11. 古代一些练外丹的资料
  12. 教程详解|3D环物的360物体如何在后台上传?
  13. 网络故障排查的思路和方法
  14. 1 c语言程序设计学生选修课管理,c语言课程设计报告-学生选修课信息管理程序.doc...
  15. 买天猫店网店转让商标过户事项
  16. 用react解决1px问题
  17. 一个中科大差生的 8 年程序员工作总结
  18. 如何开通微信支付和支付宝支付0.2%(千分之二)费率(最全攻略)
  19. 实现单点登录(伪登录)
  20. 小白都能看懂的C语言入门教程

热门文章

  1. 微信公众号网页授权记录
  2. 视觉SLAM十四讲学习第二部分(ch7-ch14)
  3. 我的面试题. 业务抽象能力测试.
  4. 后台管理系统Login 页面(部分)
  5. TensorFlow实现鸢尾花分类
  6. DDR 6 内存已经投入研发
  7. raw图片处理软件:DxO PhotoLab for Mac
  8. delphi 调用带有返回值的sql SERver 2008 存储过程
  9. 在Mac中删除残留的启动台图标
  10. visio设置图片默认大小_教大家Visio怎么随意调节图形的大小