文件IO相关的库有
- <winbase.h> CreateFile()等,winbase.h定义了win32中base APIS(最基本的c)
- <stdio.h>包含fopen(),fread()等(高级一点的c)
- MFC下CFile类封装的文件IO操作(MFC、c++)
- <fstream>下的文件IO操作(c++)
ofstream的使用
1.打开文件: open(char* fileName, int mode, int access)
mode可以有:
ios::app: 以追加的方式打开文件
ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
ios::in: 文件以输入方式打开(文件数据输入到内存)
ios::out: 文件以输出方式打开(内存数据输出到文件)
ios::nocreate: 不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc: 如果文件存在,把文件长度设为0
tips:理解ios::app:
app是变量名,其被定义于std命名空间下ios类下的static变量,所有也可以写为std::ios::app,同时在ofstream中也定义了app静态变量,所有也可以写ofstream::app
access可以有:
0:普通文件,打开访问
1:只读文件
2:隐含文件
4:系统文件
2.向文件中输出数据:put()、重载运算符<<、write()
1.二进制文件的写:put(char a),输出一个字符。
2.文本文件的写:重载运算符<<,可以输入字符,c风格字符串,string对象,格式化数字。
其中格式化数字的输出规则如下:
操纵符 功能 输入/输出
dec 格式化为十进制数值数据 输入和输出
endl 输出一个换行符并刷新此流 输出
ends 输出一个空字符 输出
hex 格式化为十六进制数值数据 输入和输出
oct 格式化为八进制数值数据 输入和输出
setpxecision(int p) 设置浮点数的精度位数输出
比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。
3.数据块的输出 write(const unsigned char *buf,int num);将buf的前num个输出到文件
3.关闭文件 close()
4.辅助操作:
1.文件结束eof()
2.文件指针定位
ostream &seekp(streamoff offset,seek_dir origin);
- seek_dir 表示移动的基准位置,是一个有以下值的枚举:
- ios::beg: 文件开头
- ios::cur: 文件当前位置
- ios::end: 文件结尾
- file2.seekp(1234,ios::beg); //把文件的写指针从文件开头向后移1234个字节
Ifstream的使用
1.打开文件open,同ofstream
2.读入文件数据,get (),get(char& x),重载>>,read()
- 1.二进制数据的读入get(),get(char& x) get():返回读入的二进制数据或字符,如果到文件末尾,返回EOF,get(char& x),将得到的字符赋值给x,返回ifstream,当到达文件末尾,返回NULL。
- 2.文本文件的读入 重载>>,与ofstream同
- 3.数据块的读入。read(),同ofstream.
3.关闭文件colse()
4.辅助函数
- 文件结束eof(),同ofstream
- 文件指针定位
- ifstream& seekg(streamoff offset, seek_dir origin).同ofstream