文章目录
- 文件操作包括
- 打开文件、
- 读文件和雪文件,
- 掌握读文件和雪文件的同时,
- 文件指针的移动,这能够控制读文件和写文件的位置。
16.1 文件流
- C++为不同类型数据的标准输入和输出定义了专门的类库,
- ios为根基类,它直接派生4个类,
- 输入流类
- 输出流类
- 文件流基类
- 字符串流基类
- 输入文件流类同时继承输入流类和文件流基类,
- 输出文件流类同时继承输出流类和文件流基类,
- 输入字符串流类同时继承输入流类和字符串流基类,
- 输出字符串流类同时继承输出流类和字符串流基类,
- 输入/輸出流类iostream同时继承输入流类和输出流类
- 输入/输出文件流类fstream同时继承输入/输出流类和文件流基类
- 输入/输出字符串流类继承输入/输出流类和字符串流基类
16.1.2类库的使用
-
C++的I/O标准类,都定义在
- iostream.h
- fstream.h
- strstream.h
-
标准I/O时用iostream.h
- 含ios、 iostream、 istream和 ostream等类
-
文件IO操作时用fstream.h
- 含fstream、 ifstream、 ofstream和 fstreambase等类。
-
串I/O时用strstream.h,
- 含strstream、 istrstream、 ostrstream、
- strstreambase和 iostream等类。
- 要进行什么样的操作,只要引入头文件就可以用类进行操作
16.2文件打开
16.2.1打开方式
-
只有用文件流与磁盘上的文件连接后
- オ能对磁盘上的文件进行操作,这个连接过程称为打开文件。
-
打开文件的方式两种。
(1)创建文件流时用构造函数打开文件,
- 即在创建流时加入参数
-
文件流类可以是 fstream、 ifstream和 ofstream中。
-
打开方式在ios类中定义,
(2)用open打开磁盘文件
- 文件流对象名是一个已经定义了的文件流对象。
- 用两种方式中的任意一种来打开文件,如果成功,文件流对象为非0,
- 失败,则文件流对象为0值。
- 检测一个文件是否打开成功可以用以下语句:
- prot决定文件访问方式,取值
- 0:普通文件。
- 1:只读文件。
- 2:隐含文件
- 4:系统文件。
16.2.2默认打开模式
- 如果没指定打开方式参数,编译器会用默认值。
- 文件打开模式有不同组合,下面就对各个模式的效果进行介绍。
- 文件打开模式如表16.1
16.2.3打开文件同时创建文件
- 创两个文件,
- ofstream默认打开方式是std:ios:out|std:iog:tunk,
- 所以当文件夹内没有test和test2时,会创建这两个文件,并向文件写入字符串。
- 向test写入字符串“ namel sexi agel”,
- 向test2写入字符串“name2sex2age2”。
- 如果文件夹内有test文件和test2时,
- 程序会覆盖原有文件而重新写入。
16.3文件的读写
16.3.1文件流
(1)文件流分类
-
流分3类,
- 输入流、输出流和输入/输出流,
- ifstream, ofstream和fstream类
-
说明了流对象后,可用open打开文件。
-
文件的打开即是在流与文件之间建立一个连接。
(2)文件流成员函数
- ofstream和 ifstream有很多磁盘文件管理的函数。
(3) fstream成员函数表
- fstream成员函数如表16.2
- 用 ifstream和 ofstream对象实现读写文件
- 首先用ofstream类创建并打开test.txt,然后用户输入5次数据,
- 这5次输入的数据全部写入 test.txt,
- 关闭 ofstream类打开的文件,
- 用 ifstream类打开文件,将文件的内容输出
16.3.2写文本文件
- 16.3.1用ifstream和ofstream类创建并写入文本文件,
- 本节用fstream写入文本文件
- fstream类的构造函数打开test.txt,
- 然后向文本文件写入了字符串"name sex age"
16.3.3读取文本文件
- 打开test. txt,文件的内容如图16.4
- 程序读取文本文件tes.t中,并将其输出,运行结果如图16.5
16.3.4二进制文件的读写
- 文本文件中的数据都是ASC码,
- 读取图片的内容,就不能使用读取文本文件的方法了。
- 以二进制方式读写文件,需ios: binary模式
- 输入两次数据,然后通过fstream以二进制方式写入到文件,
- 再通过 istream以二进制方式读取出来并输出。
- 对二进制数据读取需用read,写入二进制数据需用 write