初学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是文件的保护方式, 用户不必理会. 关于第二个参数说明如下:
定义了下列打开模式和文件属性:
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 // 文件尾
缺省状态为当前位置.
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。