13.IO流与文件
目录介绍
- 13.1 输入输出
- 13.2 文件操作实践
- 13.2.1 文件是什么
- 13.2.2 文件类型分类
- 13.2.3 操作文件类
- 13.2.4 文本文件写
- 13.2.5 文本文件读
- 13.2.6 二进制文件写
- 13.2.7 二进制文件读
- 13.2.8 文件读写指针
- 13.3 IO综合案例
13.2 文件操作实践
13.2.1 文件是什么
内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。
成千上万个文件如果不加分类放在一起,用户使用起来显然非常不便,因此又引入了树形目录(目录也叫文件夹)的机制,可以把文件放在不同的文件夹中,文件夹中还可以嵌套文件夹,这就便于用户对文件进行管理和使用。
所谓“格式”,就是关于文件中每一部分的内容代表什么含义的一种约定。 例如,常见的纯文本文件(也叫文本文件,扩展名通常是“.txt”),指的是能够在 Windows 的“记事本”程序中打开,并且能看出是一段有意义的文字的文件。文本文件的格式可以用一句话来描述:文件中的每个字节都是一个可见字符的 ASCII 码。
所谓“文本文件”和“二进制文件”,只是约定俗成的、从计算机用户角度出发进行的分类,并不是计算机科学的分类。因为从计算机科学的角度来看,所有的文件都是由二进制位组成的,都是二进制文件。文本文件和其他二进制文件只是格式不同而已。
13.2.2 文件类型分类
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放
通过文件可以将数据持久化
C++中对文件操作需要包含头文件 ==< fstream >==
文件类型分为两种:
- 文本文件 —— 文件以文本的ASCII码形式存储在计算机中
- 二进制文件 —— 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们
13.2.3 操作文件类
C++ 标准库中还专门提供了 3 个类用于实现文件操作,它们统称为文件流类,这 3 个类分别为:
- ifstream:专用于从文件中读取数据;
- ofstream:专用于向文件中写入数据;
- fstream:既可用于从文件中读取数据,又可用于向文件中写入数据。
13.2.4 文本文件写
13.2.5 文本文件读
13.2.6 二进制文件写
13.2.7 二进制文件读
13.2.8 文件读写指针
7.1 基本的输入输出
7.1.1 IO输入输出
- 7.1.1.1 输入输出介绍,C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备流向内存,这叫做输入操作。如果字节流是从内存流向设备,这叫做输出操作。
- 7.1.1.2 I/O 库头文件,iostream分别对应于标准输入流、标准输出流。iomanip声明对执行标准化 I/O 有用的服务。fstream为用户控制的文件处理声明服务。
- 7.1.1.3 标准输出流(cout),预定义的对象 cout 是 iostream 类的一个实例。cout 对象"连接"到标准输出设备。cout 是与流插入运算符 << 结合使用的。
- 7.1.1.4 标准输入流(cin),预定义的对象 cin 是 iostream 类的一个实例。cin 对象附属到标准输入设备,通常是键盘。cin 是与流提取运算符 >> 结合使用的。
- 7.1.1.5 标准错误流(cerr),预定义的对象 cerr 是 iostream 类的一个实例。cerr 对象附属到标准输出设备,通常也是显示屏
- 7.1.1.6 标准日志流(clog),预定义的对象 clog 是 iostream 类的一个实例。clog 对象附属到标准输出设备,通常也是显示屏
7.2 文件操作实践
7.2.1 文件打开
- 7.2.1.1 打开方式,ofstream 和 fstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。
- 7.2.1.2 默认打开模式,open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。用这个方法打开文件。
- 7.2.1.3 打开文件同时创建文件,可以使用std::ofstream类来打开文件并创建文件(如果文件不存在)。
7.2.2 文件的读写
- 7.2.2.1 文件流说明, C++ 中另一个标准库 fstream,它定义了三个新的数据类型:ofstream,ifstream,fstream
- 7.2.2.2 键盘输入写文本文件,使用fstream库将键盘输入的内容写入文件。使用std::getline()函数从键盘读取一行输入,并将输入内容使用<<操作符写入文件。
- 7.2.2.3 创建文件写内容,创建了一个ofstream对象file,并指定要写入的文件名为"yc.txt",可以使用<<操作符将文本内容写入文件。
- 7.2.2.4 读取文本文件,可以使用fstream库来读取文件内容,使用流提取运算符( >> )从文件读取信息,就像使用该运算符从键盘输入信息一样。
- 7.2.2.5 二进制文件的读/写,iostream和fstream头文件,分别用于输入输出和文件操作。对二进制文件分别进行写入和读取。
- 7.2.2.6 实现文件复制,可以使用std::ifstream和std::ofstream类来实现文件复制。
- 7.2.2.7 关闭文件,close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。写读写文件操作完成后,关闭流对象。
7.2.3 文件指针移动操作
- 7.2.3.1 文件错误与状态,文件错误和状态可以通过文件流对象的状态标志来表示。std::fstream类中定义了一些成员函数和状态标志,用于检测和处理文件错误和状态。
- 7.2.3.2 文件的追加,可以使用文件流对象的std::ofstream类来实现文件的追加操作。要实现文件的追加,需要在打开文件时指定追加模式。
- 7.2.3.3 文件结尾的判断,可以使用文件流对象的eof()函数来判断文件是否已经到达结尾。
- 7.2.3.4 在指定位置读/写文件,可以使用文件流对象的seekg()和seekp()函数来在指定位置进行文件的读取和写入操作。
7.3 IO综合案例
7.3.1 IO流实践
- 7.3.1.1 合并两个文件信息
- 7.3.1.2 文件复制
- 7.3.1.3 文件加密
- 7.3.1.4 使用销毁的手段保护文件内容
- 7.3.1.5 在文件中查找关键词出现的次数