新闻  |   论坛  |   博客  |   在线研讨会
初学C++ fstream
mayer | 2009-07-12 13:37:15    阅读:3611   发布文章

初学C++ fstream

 

 最近出于学习需要, 接触了一些C++的程序, 对于文件的操作, 在C++中的实现方法与C中有些不同,
现归纳如下:
 C++中对文件的操作, 是围绕三种类型的文件流(ifstream, ofstream, ftream)进行的. 而这三种流
事实上是系统定义的类. 操作中, 首先使流与文件相关联, 通过流(也就是类成员)来完成对文件的操作.
文件使用完毕, 一定要关闭, 从而切断流与文件的关联, 否则可能会损坏文件.
 在程序中要打开一个输入文件流, 对文件进行读操作, 必须说明类型为ifstream对象; 要打开一个输
出文件流, 对文件进行写操作, 必须说明类型为ofstream的对象; 要建立一个输入输出的流, 对文件进行
读写操作, 必须说明一个类型为ftream的对象.

1. 建立一个IO文件流有如下两种方式

 1) 通过调用函数open()来实现
 fstream test_file;
 /** 以读写方式打开argv[1]指定的文件, 并将文件长度截为0*/
 test_file.open(test, ios::in | ios::out | ios::trunc);

 2) 在创建IO流的同时与文件相关联, 该操作自动打开文件
 fstream test_file(test, ios::in | ios::out | ios::trunc);

 open()函数的原型为:
 void open(const char * szName, int nMode, int nPort = filebuf::openport);
 
 其中第一个参数szName表示相关联的文件名, 第二个参数nMode表示文件的打开方式, 第三个参数
nPort是文件的保护方式, 用户不必理会. 关于第二个参数说明如下:

<fstream> 定义了下列打开模式和文件属性:
 ios::app  // 从后面添加
 ios::ate  // 打开并找到文件尾
 ios::binary  // 二进制模式 I/O (与文本模式相对)
 ios::in   // 只读打开
 ios::out  // 写打开
 ios::trunc  // 将文件截为 0 长度
 ios::nocreat // 若文件不存在, 则打开失败
 ios::noreplace // 若文件存在, 如果没有设置ate或者app, 那么打开失败

2. 对文件的读写操作

 char *str = "hello, world!";
 char buf[100];

 1) 对文件的读写, 可以通过write, read实现, 如:
 
 test_file.write(str, strlen(str));
 test_file.read(buf, sizeof(buf));
 
 2) 也可以使用C++中的抽取操作符实现, 如:
 test_file << str;  // write str to file
 test_file >> buf;  // read to buf

3. 移动流的读写位置
 移动读写位置可以通过seekg或是seekp实现:
 1) test_file.seekg(10, ios::beg);
 2) test_file.seekp(10, ios::beg);
 seekp(seek put)用于ofstream对象, seekg(seek get)用于ifstream对象. 在fstream对象里, 二者
没有区别.

可以用下面的常量重新定位文件指针(第二个参数):
 ios::beg  // 文件开始位置
 ios::cur  // 当前位置,例如: ios::cur+5
 ios::end  // 文件尾

缺省状态为当前位置.

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客