关于fstream的具体使用方法

来源:互联网 发布:c语言char转int 编辑:程序博客网 时间:2024/04/29 03:33
和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 表示移动的基准位置,是一个有以下值的枚举:
  ios::beg: 文件开头
  ios::cur: 文件当前位置
  ios::end: 文件结尾
  这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。
  例:
  file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节
  file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移1234个字节
  如果vc编程的话最好使用CFile类等更加方便于文件操作
以下是关于文件流的详细介绍
在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:
  1、插入器(<<)
  向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<”Write Stdout”<<’n’;就表示把字符串”Write Stdout”和换行字符(‘n’)输出到标准输出流。
  2、析取器(>>)
  从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。
  在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。
  一、打开文件
  在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:
  void open(const char* filename,int mode,int access);
  参数:
  filename: 要打开的文件名
  mode: 要打开文件的方式
  access: 打开文件的属性
  打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:
  ios::app: 以追加的方式打开文件
  ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
  ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
  ios::in: 文件以输入方式打开
  ios::out: 文件以输出方式打开
  ios::nocreate: 不建立文件,所以文件不存在时打开失败
  ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
  ios::trunc: 如果文件存在,把文件长度设为0
  可以用“或”把以上属性连接起来,如ios::out|ios::binary
  // 注:现在C++标准库不支持nocreate和noreplace,以前的旧版本可以用.
  打开文件的属性取值是:
  0:普通文件,打开访问
  1:只读文件
  2:隐含文件
  4:系统文件
  可以用“或”或者“+”把以上属性连接起来 ,如3或1|2就是以只读和隐含属性打开文件。
  例如:以二进制输入方式打开文件c:config.sys
  fstream file1;
  file1.open(“c:config.sys”,ios::binary|ios::in,0);
  如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:
  file1.open(“c:config.sys”);<=>file1.open(“c:config.sys”,ios::in|ios::out,0);
  另外,fstream还有和open()一样的构造函数,对于上例,在定义的时候就可以打开文件了:
  fstream file1(“c:config.sys”);
  特别提出的是,fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。
  ifstream file2(“c:pdos.def”);//以输入方式打开文件
  ofstream file3(“c:x.123”);//以输出方式打开文件
  所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定义。
  二、关闭文件
  打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:file1.close();就把file1相连的文件关闭。
  三、读写文件
  读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式
  1、文本文件的读写
  文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。假设file1是以输入方式打开,file2以输出打开。示例如下:
  file2<<”I Love You”;//向文件写入字符串”I Love You”
  int i;
  file1>>i;//从文件输入一个整数值。
  这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些
  操纵符 功能 输入/输出
  dec 格式化为十进制数值数据 输入和输出
  endl 输出一个换行符并刷新此流 输出
  ends 输出一个空字符 输出
  hex 格式化为十六进制数值数据 输入和输出
  oct 格式化为八进制数值数据 输入和输出
  setpxecision(int p) 设置浮点数的精度位数 输出
  比如要把123当作十六进制输出:file1<

include

include #include #include using namespace std; int main() { ifstream in(“test.txt”);…

mafuli007
mafuli007
2012年03月03日 14:02
3977
【C语言】文件定位读取

文件定位读取 文件顺序读取 位置指针按字节位置顺序移动。 文件随机读取 读写完上一个字符(字节)后,并不一定要读写其后续的字符(字节),而可以读写文件中任意位置上所需要的字符(字节)。…
wait_for_taht_day5
wait_for_taht_day5
2016年03月04日 13:52
2778
第七讲:c/c++文件的读取、操作和定位

主要是文档的各种操作
xuan_zizizi
xuan_zizizi
2017年04月08日 16:52
339
C/C++在文件指定位置插入字符串或者空行

// test725.cpp : 定义控制台应用程序的入口点。 // #include “stdafx.h” #include using namespace std; #…
jolin678
jolin678
2016年07月26日 04:01
2293
C++读写二进制文件

C++提供了以下类执行从文件输出字符或者输入字符到文件里: ofstream:写文件的Stream 类 ifstream:读取文件的Stream 类: fstream:读/写文件的Stream 类。…
laoxuan2011
laoxuan2011
2016年07月23日 11:40
506
c++ 读写二进制文件流

掌握文本文件读写的方法 了解二进制文件的读写方法 C++文件流: fstream  // 文件流 ifstream  // 输入文件流 ofstrea…
ljq550000
ljq550000
2015年03月08日 18:41
2103
C++二进制文件读取时怎么定位

    这会有点坐不住了,写点自己感兴趣的东西吧。写点快要做课程设计了,大致思路是先把一些简单的工具学了,然后再集中精力把系统拿下来,在课程设计里文件的读写是很重要的,前几天在机房看了一会,发...

NO_WONDER
NO_WONDER
2011年05月28日 17:09
1272
常用的C/C++文本文件的读写函数

概述 文本文件的读写是算法研究和工程应用中常见的功能模块。C和C++的标准库中提供了多种文本文件的读写方法,我们一般都会掌握其中比较习惯使用的一种或几种方法。解决问题的方法不在多,而在精。经过在网上…
u010096745
u010096745
2015年12月28日 22:12
2845
C++覆盖或删除指定位置的文件内容

我们经常使用ofstream或者fstream可写文件,使用ifstream可以写文件,但需要设置文件的打开状态为ios::out。C++中IO流打开模式使用位掩码来表示。IO流打开模式有: 成员…
K346K346
K346K346
2017年03月16日 16:52
3376

qq_25301067

+关注
原创
89
粉丝
3
喜欢
0
码云

他的最新文章

更多文章
C++primer plus第六版课后编程练习答案14.1
C++primer plus第六版课后编程练习答案13.4
C++primer plus第六版课后编程练习答案13.3
相关推荐

C++中相对路径与绝对路径以及斜杠与反斜杠的区别
C++文件流定位
【C语言】文件定位读取
第七讲:c/c++文件的读取、操作和定位

他的热门文章

c++读写文件设定读和写的位置
3663
VC6.0 中 getline(cin, string) 需按两次回车解决方法,getiline输入时的用法
718
C++primer plus第六版课后编程练习答案2.2
687
C++primer plus第六版课后编程练习答案2.3
540
C++primer plus第六版课后编程练习答案14.1
498
0

内容举报
返回顶部
收藏助手

不良信息举报
您举报文章:c++读写文件设定读和写的位置
举报原因: 色情 政治 抄袭 广告 招聘 骂人
其他
原因补充:
(最多只允许输入30个字)
提交

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 将军在上我在下19楼 将门风云片尾曲 将冥币塞进atm 将神皇德耀世 将夜 快眼看书 将夜sodu 将夜燃文 将欲辞君挂帆去下一句 姜方舟父母 姜惠贞整容 姜培琳微博 姜声扬老婆 姜太公的小岛修改器 姜维平与薄 姜昕言吻戏 僵尸卖铁 僵尸木瓜冰冻5年 僵尸危机之梦魇无敌版 僵尸医生国语优酷 讲不出再见铃声 奖状的写法 蒋宏坤别墅 蒋宏坤女儿 蒋宏坤情人 蒋劲夫助理亲密照 蒋巨峰简历 蒋恺老婆 蒋黎丽 蒋小泉 蒋远华和赵晓红有一腿 绛县农廉网 交警被套牌车顶行 交警彭玉麟 娇妾成群txt 娇妾成群txt下载 蛟河电大 蛟龙号最新消息 焦爱芹 焦饭活命 焦利 内幕 焦利简历