大家好,又见面了,我是你们的朋友全栈君。
初学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 // 文件尾
缺省状态为当前位置.
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/191852.html原文链接:https://javaforall.cn