文件处理
各种计算机应用系统通常把一些相关信息组织起来保存在外存储器中,
称为文件,并用一个名字(称为文件名)加以标识
C++把文件看成无结构的字节流,
编码方式: 文本文件 二进制文件
存取方式: 顺序文件 随机文件
ifstream、ofstream 和 fstream 类用于内存与文件之间的数据传输
打开和关闭文件
要执行文件的输入输出,须做以下几件事:
(1) 在程序中包含头文件fstream;
(2) 建立文件流。建立文件流的过程就是定义流类的对象,例如:
ifstream in;
ofstream out;
fstream both;
分别定义了输入流对象in;输出流对象out,输入输出流对象both。
(3) 使用open()函数打开文件,也就是使某一文件与上面的某一流相联系。open()函数是上述三个流类的成员函数,其原型是在fstream.h中定义的, 原型为:
void open(const unsigned char*,int mode,int access=filebuf::openprot);
( 4) 对open结果进行检查(检查打开操作是否成功。可省略,但不推荐。)
(5)进行读写。在建立(或打开)的文件上执行所要求的输入或输出操作;
(6)关闭文件流对象。
文件读写:
#include<fstream>
using namespace std;
int main(){
ofstream fout;
fout.open(“f:\\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;
}
注:
\一个转义字符,两个是反斜杠
#include<fstream>
using namespace std;
int main(){
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;
}
注:
用字符数组,不用字符串,不是open语句参数
字符串对象,不直接用字符串对象做参数,把字符串对象转为字符数组.c_str(),
文件打开
open()函数原型在fstream中定义,函数原型如下:
void open (char* filename, int mode, int access=0);
第一个参数用于传递文件名;
第二个参数mode值表示文件的使用方式;
第三个参数打开文件的共享方式
filebuf::openprot; //默认的兼容共享方式(与MS_DOS文件兼容)
filebuf::sh_none; //独占,不共享
filebuf::sh_read; //读共享
filebuf::sh_write; //写共享
文件打开方式:
ios::in = 0x01,//供读, (ifstream默认的打开方式)
ios::out = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)
ios::ate = 0x04, //文件打开时,指针在文件尾部。可改变指针的位置,常和in、out联合使用
ios::app = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后
ios::trunc = 0x10, //在读写前先将文件长度截断为0(默认)
ios::binary = 0x80 //二进制格式文件
ios::in: 用于输入。文件以输入方式打开
- ifstream流类的默认打开方式
- 文件存在,打开文件;
- 文件不存在,打开失败。
ios::out: 用于输出。文件以输出方式打开。 - ofstream流类的默认打开方式
注:
- 如果文件存在,打开文件,并清空原文件中的内容。
- 如果文件不存在,则创建文件。
- 如果文件路径错误,创建流对象操作失败。
文件关闭
关闭文件操作包括把缓冲区数据完整地写入文件,添加文件结束标志,
切断流对象和外部文件的连接
若流对象的生存期没有结束,可以重用
当一个流对象的生存期结束,系统也会自动关闭文件 文件操作后,随时关闭流对象,数据已写道文件中,节省资源
ofstream ofile ; // 创建输出文件流
ofile . open ( “myfile1” ) ;// ofile流与文件“myfile1”相关联
…… // 访问文件“myfile1”
ofile . close ( ) ; // 关闭文件“myfile1”
ofile . open ( “myfile2” );// 重用ofile流
文本文件
文本文件用默认方式打开
文本文件用文件流对象(文本文件流)进行读/写操作
文本文件是顺序存取文件
通常一个逻辑记录用换行符分隔;数据项之间可以用空白符、换行符、制表符等分隔
文件中只存储了数据,没有存储记录的逻辑结构
每条记录的长度是不同的
只能顺序访问每一条记录
注:
数据对象相当于一条记录
有空格在读不全 行末的空格等于没有
存文本文件加间隔符,一行结束后加反斜杠n