原创 初学C++ fstream

2009-6-26 11:33 3339 8 8 分类: MCU/ 嵌入式

 最近出于学习需要, 接触了一些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  // 文件尾


缺省状态为当前位置.


4. 暂时这么多了, 以后会慢慢增加!欢迎跟帖!


【2007-03-20】

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条