文件的概念
1.1文件是程序设计中一个重要的概念,所谓“文件”,一般指存储在外部介质上数据的集合。
1.2外存文件包括磁盘文件,光盘文件,和U盘文件。
1.3对用户来说常用的文件类型有两大类,一类是程序文件,如C++的源程序文件(.cpp),目标文件(.obj),可执行文件(.exe)。一类是数据文件,程序里面常常需要把一些数据存放起来,这种磁盘文件就是数据文件。程序中的输入和输出对象就是数据文件。
1.4根据文件中数据的组织形式,又分为ASCII文件和二进制文件。ASCII文件又称文本文件,或字符文件,它的每一个字节存放一个ASCII代码,代表一个字符。二进制文件又称内部格式文件或字节文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。
1.5对于字符信息,在内存中是以ASCII代码形式存放的,因此,无论用ASCII文件输出还是用二进制文件输出,其数据形式是一样的,但是对于数值型数据,二者是不同的。如100000,ASCII形式因为一个字符占一个字节所以用了6个字节,而二进制形式因为是长整形,占用了4个字节。
1.6ASCII形式便于阅读,直观,但是占用空间比较多,需要花时间转换(二进制形式与ASCII的转换),二进制形式与ASCII相反。
文件流类与文件流对象
1.1文件流是以外存文件为输入输出对象的数据流。输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流入内存的数据。每一个文件流都有一个内存缓存区与其对立。
1.2文件流本身不是文件,而是以文件为输入输出对象的流,若要对磁盘文件输入输出,就必须通过文件流来实现。
1.3文件操作的3大类:
A.ifstream类,由istream类派生过来。支持从磁盘文件的输入。
B.ofstream类,由ostream类派生过来。支持向磁盘文件的输出。
C.fstream类,由iostream类派生过来。支持磁盘文件的输入输出。
文件的打开与关闭
1.1打开磁盘文件步骤:
A.为文件流对象和指定的磁盘文件建立关联,以便使文件流流向指定的磁盘文件。
B.指定文件的工作方式,如,指定该文件是输入文件还是输出文件,是以ASCII形式还是以二进制形式。
1.2打开磁盘文件的方式:
A;使用open函数
ofstream outfile;
//定义ofstream类对象outfile
outfile.open("f1.dat",ios::out);
//使文件流与f1.dat建立关联指定其为输出文件
B:使用构造函数
ofstream ("f1.dat",ios::out);
一般采用的是B方式。
1.3文件输入输出方式设置值
A.ios::in 以输入方式打开文件
B.ios::out 以输出方式打开文件(这是默认方式),如果已有此名字的文件,则将其原有内容全部清除。
C.ios::app 以输出方式打开文件,写入的数据添加在文件末尾。
D.ios::ate 打开一个文件,文件指针指向末尾
E.ios::trunc 打开一个文件,文件存在则删除全部数据,文件不存在则新建一个文件。
F:ios::binary 以二进制方式打开一个文件, 默认为ASCII形式。
G:ios::nocreate 打开一个已有的文件,如果不存在则失败。新版本的C++里面没有。
H:ios::noreplace 如果文件不存在则新建文件,如果存在则失败。新版本C++里面没有。
I:ios::in|ios::out 以输入和输出的方式打开文件,文件可读写。
J:ios::out|ios::binary 以二进制的方式打开一个输出文件。
K:ios::in|ios::binary 以二进制方式打开一个输入文件
1.4每一个打开的文件都有一个文件的指针,该指针的初始位置由I/O确定,每次读写都从文件指针的当前位置开始。每读入一个字节,指针就后移一个字节。当文件指针移到最后,就会遇到文件结束符EOF(文件结束符也占一个字节,其值为-1),此时流对象的成员函数eof的值为非0值(一般为1),表示文件结束了。
1.5可以用“位或”运算符进行输入输出方式的组合。
1.6如果打开操作失败,open函数的返回值为0,如果调用构造函数的方式打开文件,则流对象为0,据此测试打开是否成功。
1.7在对已打开的磁盘文件的读写操作完成后,应关闭该文件,关闭文件用成员函数close。
outfile.close();
所谓关闭,实际上是解除该磁盘文件与文件流的关联,原来设置的工作方式也失效。这样,就不能通过文件流与其他磁盘文件建立关联,通过文件流对新的文件进行输入和输出。