关于fstream的具体使用方法

和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个字)
提交

你可能感兴趣的:(c++学习笔记)