文件读写
文件分类
- 按照编码方式:文本文件和二进制文件
- 按照存储方式:顺序存储(读的时候按照顺序)和随机存储(读的时候可以定位的某一行)
使用的类
- ifstream
- ofstream
- fstream
文件和流之间的交互
- 无论是什么文件,都是按照字节的方式存储
- 文件尾部有一个结束符号
操作步骤
大体步骤
-
包含头文件<fstream>
-
创造流对象:
ifstream(读文件),ofstream(写文件) ,fstream(可读可写) -
打开文件(open方法)
-
检查是否打开:is_open()方法,返回true或者false
-
读写
如果是写操作,和使用cout形式一样,为fout<<内容
如果是读操作,和使用cin一样为fcin>>内容
如果是读取字符,可以使用fcin.get(ch);如果写字符,使用fout.put(ch);
总之,流对象进行读写操作和cin,cout基本相同 -
关闭流资源
具体实现
- 写文件的小例子
ofstream fout;
fout.open("test.txt",ios::out);//建立文件信息区
if (! fout.is_open()){ cout<<"Cannot open output file\n,"; return 1;}
fout<<10<<" "<<123.456<<" "<<"This is a text file.\n";
fout.close();
return 0;
ofstream fout;char filename[20];cin>>filename;
fout.open(filename,ios::out);//建立文件信息区
if (! fout.is_open()){ cout<<"Cannot open output file\n,"; return 1;}
fout<<10<<" "<<123.456<<" "<<"This is a text file.\n";
fout.close();
return 0;
` ofstream fout;string filename;cin>>filename;
fout.open(filename.c_str(),ios::out);//建立文件信息区
if (! fout.is_open()){ cout<<"Cannot open output file\n,"; return 1;}
fout<<10<<" "<<123.456<<" "<<"This is a text file.\n";
fout.close();
return 0;
- 具体说明
1、open方法的第一个参数代表文件的地址。可以直接写,如果使用变量,只能是字符数组,不能是字符串
2、open函数的第二个参数有以下几种情况:
iso::in
如果文件不存在,打开失败;如果文件存在正常打开
ios::out
如果文件不存在,创建新文件;如果文件存在,打开并清空文件内容;如果路径不存在,打开失败
ios::app
如果文件不存在,创建新文件;如果文件存在,在文件末尾追加内容
ios::ate
如果文件不存在,创建文件;如果文件存在,打开文件并清空文件内容
ios::trunc = 0x10
在读写前先将文件长度截断为0(默认)
ios::binary = 0x80
二进制格式文件
3、检查是否打开使用is_open()方法
4、流对象的构造函数:
参数可以是文件的路径,这样就相当于打开了文件。然后检查是否打开可以采用判断流对象是否为空的方法
5、一定要关闭流对象。
因为我们在创建了流对象后,系统会建立一个通道,如果不关闭,会一直占用这个系统资源。
其他函数
- abort()
C 库函数 void abort(void) 中止程序执行,直接从调用的地方跳出 - cerr
cout - getline(流对象,变量)