电脑档案

<image>

，简称文件，是存储在某种长期储存设备或临时储存装置中的一段数据流，并且归属于计算机文件系统管理之下。所谓“长期储存设备”一般指磁盘、光盘、磁带等。而“短期存储装置”一般指电脑内存。需要注意的是，储存于长期存储装置的文件不一定是长期储存的，有些也可能是程序或系统运行中产生的临时数据，并于程序或系统退出后删除。

## 历史

<image>

计算机“档案”一词最早在1952年用于计算机数据方面，指的是在打孔卡所储存的信息。

## 计算机文件的定义

具有某种特定格式（一般以后缀名形式表示。如：.txt、.png，也可为空）、其中存储文本或二进制信息并存储在长期存储设备或临时存储设备中的一段数据流。

## 文件类型与内容

<image>

一种重要的文件是文本文件，是由一些字符的序列组成的。二进制文件一般是指除了文本文件以外的文件。

现代大多数计算机的操作系统中，档案是将资料安排成一维字节的容器，格式主要由其内容定义；而某些平台对档案格式或由扩展名称（副档名）来指示，有关资料字节必须如何安排及有意义地解释的规则。例如纯文字档案（微软视窗的副档名为.txt）的字节与ASCII或UTF-8字元相关联，而图像、影片和声音的格式则以其它副档名解释。大多数档案类型也为元资料分配了一些字节，这允许档案携带一些关于本身的基本资讯。

一些档案系统能储存支援格式以外的特殊资料，然后以扩展属性或分支把它当成档案。其它档案系统可借由跨斗(sidecar)档或依软件特定的数据库完成，然而，这些方法比容器和压缩档更易于丢失描述档案的元资料。

### 档案大小

一个档案资料内容所有的字节数，即为该档案相关储存量的大小。大多数现代计算机的操作系统中，档案大小是系统限制下任何非负整数的字节。许多较旧的操作系统只纪录实体储存设备上，档案占用区块或磁道的数量。在这样的系统中，软件采用其它方法来纪录精确的字节数（例如CP/M使用特殊控制符Ctrl-Z来表示文字档的结尾）。

除非档案的内容恰好对应于固有储存池中的资料，档案大小的一般定义并不特别要求具有任何真正的意义；某个特殊情况是零字节档案，这或许是刚建立而尚未写入资料的，也可能作为档案系统中的某种标志，或是意外事故（磁盘中止操作的结果）。例如，典型的类Unix系统中，在bin目录的ls所指向的档案大小几乎很少变动。如果与dev目录中的null档案来比较，null也被当作是一个档案，但其大小是无意义的。（这可能造成误导，因为/dev/null并不是实在存有资料的内容：在类Unix系统中，所有资源包括设备都可如同档案一样被存取，但档案和设备之间仍然有不同区别－对系统内核来说它们的行为不同，而且/dev/null档的“大小”是一种晦涩的说明方式。

把/dev/null当成是一个输出设备，它并没有所谓的档案大小。

### 资料内容的安排

计算机档案中的资讯会包含较小的资料包（通常称为“记录”或“行”），它们各自不同但有一些常见的特征。例如，工资单中包含员工和其工资的详细资讯；工资单档案中的每条记录只涉及一名员工，所有的记录则具有与工资相关的共同特征－这非常类似在没有计算机的办公室，将所有工资单的纸本文件放入特定档案柜中。文字档案其中包含了许多文字行，可对应于印在一张纸上的多行语句。或者，档案可以包含任意二进制大件（BLOB），或者它可以包含执行档。

将资讯分组到档案中的方式完全取决于它的设计方式。这导致了多样化标准的档案结构，任何可想像到的，从最简单到最复杂的用途。大多数计算机档案根据软件的用途而产生、修改或删除档案以供给计算机程序使用。建立程序的开发人员决定需要哪些档案，如何使用它们与（通常以）它们的名称。

在一些使用案例中，计算机的使用者能看到并利用软件处理档案内容。例如在文字编辑器软件中，使用者操作他亲自命名的文字档。虽然资料内容由文字编辑器的内部程序格式来安排，但使用者可以选择档案的名称和位置，并输入大部分资讯（如字句和段落）而后储存于档案中。

许多应用程序将档案中的所有资料压缩成单一个档案，使用内部标记来分辨其中所包含类型的资讯。压缩档的优点是减少档案数量、方便传输、减少储存空间，或只是整理过时的档案。在下一次使用之前，压缩档则必须需要被解压缩。

### 档案的操作

以应用程序可对档案执行，最基本的一些操作如下列：

- 建立一个新档案
- 更改档案的访问权限和属性
- 打开档案，使档案内容可用于程序
- 从档案读取资料
- 将资料写入档案
- 关闭一个档案，终止它和程序之间的关联

计算机的档案可以被建立、移动、修改、增长、压缩和删除。大多数情况下，在计算机执行的应用程序会负责这些操作，但如果有需要，计算机的使用者也可以操作档案。例如微软的Word档案通常是以微软的Word办公应用软件来建立和修改，以回应使用者的操作指令；但使用者也可以使用档案总管（例如微软视窗系统上的）直接移动、重新命名或删除这些档案）或以指令列（CLI）来作批次处理。

在类Unix系统中，单一使用者程序不能直接在档案系统的基础上执行。只有系统内核能处理档案，它透通地负责系统上所有使用者程序处理档案的交互要求。计算机的操作系统提供了一个抽象的层级，这表示牵涉到使用者空间的档案动作只能借由档案名称（而不是实际的档案把柄）。例如，rm filename并不是去删掉档案本身，而只能删除与实际档案系统之间的链接。档案可以有很多链接，但是当它们全部被删除时，系统内核则会认为档案设备的储存空间就能够重新分配利用。这个可用空间普遍被认为是资料安全上的风险（因有软件可将其中删除的档案复原）。所以确保安全的删除程序都会使用系统内核的功能，去擦掉档案系统中的实际资料。

## 识别和整理

在现代计算机中通常使用档案的名称来存取。在某些操作系统中，该名称与档案本身相关联。在其它系统中，档案则可能是匿名的，由具有名称的链接指向。而后者的情况下，使用者仍可识别与档案本身链接的名称，但这是虚拟的类比，特别是当有多个链接指到同一档案的的情况。

目录是指档案（或链接）的位置。更一般地，目录是包含档案或指到档案的链接的列表；在这个定义中，“档案”一词包括了所位于的目录，这是极重要的概念，因为如此才有目录的层次结构存在，即包含子目录的目录。引用目录中的档名通常必须是唯一的。换句话说，一个目录下的档案名称不能相同。而在某些操作系统中，名称可能包括了类型，这表示目录中可以包含相同名称但多种不同类型的物件（例如目录和档案）。

在计算机的档案系统中，档名与位于目录的路径必须和其它档案有唯一的区隔，两个档案不可以具有相同的名称和路径。在匿名的档案系统中，则会在命名空间中有某一个档案的参照。大多数情况下，命名空间中的任何名称将完全指向零个或某一个档案，但是档案可在任何命名空间内由零个，一个或多个名称来表示。

根据应用程序的规则，由一定格式组成的的字串才能当作档案或链接名称。名称是否正确取决于所使用的计算机系统类型。早期计算机只允许使用几个字母或数字作为档名，但现代计算机允许包含几乎任何unicode字母或数字组合的长名称（有些最多到255个字元），让使用者更容易从名称来理解档案的用途目的。某些计算机系统允许档案名包含空格；档名大小写的区分由档案系统决定。Unix档案系统通常会区分档名的大小写，并允许使用者层级的应用程序，产生以相同字串但大小写不同命名的档案。微软视窗系统支持多个档案系统，每个档案系统有关于大小写区分的策略；常见的FAT档案系统，如果使用者用磁盘编辑器编辑目录条目中的档案名，可以有多个大小写不同的档案。然而，使用者应用程序通常无法产生相同名称但大小写不同的多重档案。

<image>

大多数计算机使用档案夹或目录，不论是哪个用词，其概念都一样将档案安排为层次结构。每一个目录可包含任意数量的档案，它还可以包含其它目录，在其中的档案夹称为子目录。子目录也能包含更多的档案和目录等，而造成一个树状结构。其中的“主目录”（或“根目录”－名称因操作系统而异）包含任意数量的其它目录和档案。目录如同档案一样，可以给名（除了根目录之外，根目录通常没有名称）。运用目录使得以逻辑方式来组织档案变得更加容易。

当计算机允许使用目录时，每个档案和目录不仅具有自己的名称，而且还包含识别其所位于的路径。在路径中使用某种特殊字符（例如斜杠）来区分档案和目录名称。例如在右图范例中，/Payroll/Salaries/Managers 这个路径表示在名称为“Salaries”的目录中，有唯一名为“Managers”的档案。而“Salaries”又包含在名为“Payroll”的目录中。范例中的目录和档案名以斜杠分隔；最顶层或根目录没有名称，因此路径以斜杠开头（如果根目录具有名称，则会在此第一个斜杠之前）。

许多计算机系统使用档案名中的副档名，来帮助识别它们包含的资料内容，也称为档案类型。在微软系统的副档名由档案名末尾的句点组成，后跟几个字母来标识档案的类型。.txt 的副档名代表类型为文字档，一个 .doc 副档名代表类型为微软办公室软件Word产生的档案，诸如此类。即使某个系统使用副档名，系统识别和处理它们的程度可能会有所不同。在一些系统中它们是必需的，而其它系统完全忽略副档名的存在。

## 档案的保护

许多现代计算机系统提供了保护档案避免意外和故意破坏的方法。系统可让多个使用者设定个别档案的权限，以控制谁可以拥有修改、删除或产生档案和目录的权限。例如，授予使用者只能读取档案或目录的权限，但不能修改或删除它（即“只读”属性）；或者允许使用者可读取和修改档案或目录，但不能执行它们。权限也能设定为仅允许某些特定使用者查看档案或目录的内容。权限可防止未经授权的篡改或破坏档案中的资讯，并将私人资讯保密以防未经授权的使用者。另一种保护机制是只读旗标。当档案被开启（由计算机程序或人类使用者）时，可以查看档案但是不能修改，该旗标对于不可修改或删除的关键资讯非常有用，例如仅供系统内部使用的特殊档案。一些系统还包括一个隐藏旗标，使某些档案不会出现；该旗标被系统用来隐藏那些使用者不应该改变的基本系统档案。

## 储存方式

任何有用途的档案都必须具有实体，亦即计算机系统中的档案（抽象概念），如果它完全存在则必须有真正的实物对应。在物理上，大多数计算机档案存在于某种类型的资料储存设备上。例如，大多数操作系统将档案储存在硬盘上。自20世纪60年代初以来，硬盘一直是长久性的储存形式。如果档案仅包含暂时的资讯，它们可能被放入RAM中。在某些情况下，计算机档案也可以储存在其它介质上，如磁带、光碟，DVD、Zip或USB磁盘等。固态硬盘的使用也开始渐渐取代传统硬盘。在类Unix操作系统中，许多档案并没有与实际的物理储存设备相关联。例如在/dev/null, /dev, /proc和/sys目录下的大多数档案。这些是虚拟档案：它们被当作系统内核中的特殊物件，如执行的使用者程序所见到的。档案通常以控制区块或把柄来表示。档案控制区块（FCB）是用于建立档案名等的储存区域，然后作为参数传递到操作系统，出现在较旧的IBM系统和早期的PC操作系统（包括CP/M和MS-DOS早期版本）。档案把柄通常是不透明的资料型别或整数，它是在1961年左右由在Burroughs B5000执行，基于ALGOL的Burroughs MCP引入的，但现在已经普及了。

虽然一个文件表现为一个单一的流，但它经常在磁盘不同的位置存储为多个数据碎片（甚至是多个磁盘）。操作系统会将它们组织成文件系统，每个文件放在特定的文件夹或目录中。

文件是由软件创建的，而且符合特定的文件格式。

## 备份

当计算机档案含有非常重要的资讯时，则有备份程序的需求以防止破坏档案的灾难。备份指的是在另外独立的储存装置上，建立档案的复制版本，以确保当计算机发生事故，或者当档案被意外删除时，可以从备份将它们还原。有很多种备份档案的方法。大多数计算机系统提供工具程序来协助备份过程，如果有许多档案需要安全备份，这些程序会非常耗费时间。档案通常被复制到可移动的介质上，例如写入CD或磁带。将档案复制到同一台计算机中的另一个硬盘或可防止一个磁盘出现故障，但如果有必要防止整台计算机出现故障或破坏，则必须在可移动的其他介质上复制档案，并将备份存放在另一个安全而且距离不同的位置。

祖-父-子备份方法会自动进行三次备份；祖档案是档案最旧的复制版本，而子档案是目前最新的复制版本。

## 档案系统和档案管理器

计算机组织、命名、储存和操作档案的方式被统称为其档案系统。大多数计算机至少有一个档案系统。有些计算机可使用数种不同的档案系统。例如在较新的微软视窗系统上，除了最新版本预设的NTFS档案系统之外，还向前支援旧版MS-DOS的FAT档案系统。每种系统都有优缺点，例如FAT仅允许无空格，八字元的档案名（加上三个字元的扩展名），而NTFS则可包含空格的更长名称。使用者可在NTFS中将档案命名为“Payroll records”（包含一个空格），但在FAT中档名会受限制变成如“payroll.dat”这样的名称（除非使用允许更长名称的VFAT扩展）。档案管理器是允许使用者建立、移动、删除和重新命名档案和目录的公用程序，虽然实际上它只是对档案或目录名称的操作，而非读取档案内容或将资讯储存到档案中。每个计算机系统为其本机档案系统提供至少一个档案管理器程序。例如档案管理器（以前称为视窗资源管理器）通常用于微软的视窗系统，而在Linux系统常见的档案管理器则是Nautilus。

## 注意

- 在RAM中的一组字节通常不叫做文件，除非它们被存放在RAM disk中。
- 在历史上，文件的定义是“记录的序列”。现在这种定义不常用。

## 另阅

- 文件系统