第二十一章、文件操作
1. 文件概述
文件是将计算机运行时的数据进行归档的一种方式,它将计算机内运行的数据以字节为单位有序的存储于文件系统中,供后续使用。这个文件系统可以存在于硬盘、优盘甚至是内存中。
文件都是以字节为单位,多个字节顺序存储的。通常一组数据保存为一个文件并且有一个名称,称为文件名。
文件通常存储在文件系统中的某个文件夹中。从一个文件系统的起点,到达这个文件所经历的一系列文件夹名称为路径,用字符串表示。
路径
在 Windows 操作系统中,文件路径通常都是以 C:\、D:\ 这样的磁盘的盘符开始。在 Moc OS 或 Linux 操作系统中,文件路径通常是以反斜杠 /(根文件夹)开始的。
如:
Windows 下的文件路径示例:
C:\Windows\regedit.exe
Mac OS、Linux 下的文件路径示例:
/etc/passwd
说明:
在路径表示的字符串中,文件夹和文件夹之间用一个符号来分隔。我们把这个叫做路径分隔符。
- Windows 下路径的路径分隔符是反斜杠(
\)。 - Mac OS、Linux 下路径的路径分隔符是斜杠(
/)。
如在 Windows 文件浏览器中的路径显示位置和路径表示方式如下图所示

绝对路径和相对路径
我们把从文件系统的起点开始的路径称为绝对路径。绝对路径是访问文件所必须的路径。
在现实编程开发的过程中,有些应用程序安装的位置不同,比如在 Windows 上安装应用程序时,有些人喜欢安装在 C 盘。有些喜欢安装在 D 盘。这就给程序访问所需要的文件带来了麻烦。因此我们常使用相对路径。
相对路径通常是一个不从文件系统起点的开始的路径。这个路径可以根据当前程序的工作路径动态的算出来绝对路径。这样的路径称为相对路径。如上图中,相对路径可以写成 regedit.exe 或 .\regedit.exe 它的当前工作路径是 C:\Windows,因此拼接以后 C:\Windows\regedit.exe 就是 regedit.exe 这个文件的绝对路径了。
在使用 C 语言对文件进行操作的方式有两种:
- 读:从文件中获取数据到内存中。
- 写:将内存中的数据保存到文件中,我们把这个过程称之为序列化。
在将计算机内存中的数据写入到文件中时,我们要人为规定文件中哪个字节或哪几个字节存放什么数据,这个规定称为文件格式。规定文件格式是保证数据能够顺利读写的基础。
对任何文件的完整操作都要经过如下三步。
文件操作的步骤
- 打开文件
- 读、写文件
- 关闭文件
打开文件是设备上电、操作系统为该文件分配缓存的过程。关闭文件则是清空缓存、释放缓存和设备断电的过程。关闭文件可以释放此文件占用的系统资源。因此一个完整的文件操作,打开文件和关闭文件要成对出现。否则可能会影响系统的稳定性。读文件是将文件中的内容复制到内存并解释的过程,写文件是将内存中的数据放入到文件中的过程。
文件都是以字节为单位进行存储的。为了开发人员操作方便,C 语言的标准库函数提供了两套应用程序接口(Application Programming Interface,简称 API)供开发人员使用。这两套接口分别是二进制文件操作和文本文件操作。
二进制文件操作就是将计算机的内存中的某段数据和文件中的某段位置的数据直接进行复制,不进行解析。比如一个整数 123456 在内存中占用 4 个字节,直接放入文件中也是 4 个字节,且字节序也完全一致。
文本文件操作就是将计算机内存中的数据解析成字符串,然后将字符串对应的内存中的内容整体保存到文件中。比如一个整数 123456 ,将其转为字符串则为 "123456",在内存中实际占用 6 个字节然后把这 6 个字节放入文件中。使用文本文件操作的好处是使用文本文件编辑器(如 Windows 上的记事本和各种文本文件编辑器)可以直接打开阅读和编辑。缺点是在程序读写数据时需要将文件内容中的字符串和实际内存中的数据格式进行转换。有效率上的损失。
文本文件操作 操作通常以行为单位进行操作,一般行的结束符是 "\n"(Linux/UNIX常用)或 "\r\n"(Windows 常用)。
文本文件操作 时,每一行数据中表示的内容通常需要规定其分隔符,否则可能无法划分数据的边界,导致读取错误。常用的分隔符有空格(" ")、制表符("\t")、逗号(",")等。
实验:
找到你电脑上的任意一个记事本文件,查看其占用字节数。然后使用记事本等编辑器重新编辑,然后查看其文件大小。