计算机文件

**電腦檔案**（或稱**檔案**、**計算機文件**、**文件**）是儲存在某種長期儲存裝置或臨時儲存裝置中的一段資料流，並且歸屬於計算機檔案系統管理之下。所謂「長期儲存裝置」一般指磁碟、光碟、磁帶等。而「短期儲存裝置」一般指電腦記憶體。需要注意的是，儲存於長期儲存裝置的檔案不一定是長期儲存的，有些也可能是程式或系統運行中產生的臨時數據，並於程式或系統登出後刪除。

## 歷史

計算機「檔案」一詞最早在 1952 年用於電腦資料方面，指的是在打孔卡所儲存的資訊。

## 電腦檔案的定義

具有某種特定格式（一般以字尾名形式表示。如：.txt、.png，也可為空）、其中儲存文字或二進位資訊並儲存在長期儲存裝置或臨時儲存裝置中的一段資料流。

## 檔案類型與內容

一種重要的檔案是文字檔案，是由一些字元的序列組成的。二進位檔案一般是指除了文字檔案以外的檔案。

現代大多數計算機的作業系統中，檔案是將資料安排成一維位元組的容器，格式主要由其內容定義；而某些平台對檔案格式或由擴展名稱（副檔名）來指示，有關資料位元組必須如何安排及有意義地解釋的規則。例如純文字檔案（微軟視窗的副檔名為.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 檔案系統，如果使用者用磁碟編輯器編輯目錄條目中的檔案名，可以有多個大小寫不同的檔案。然而，使用者應用程式通常無法產生相同名稱但大小寫不同的多重檔案。

大多數計算機使用檔案夾或目錄，不論是哪個用詞，其概念都一樣將檔案安排為層次結構。每一個目錄可包含任意數量的檔案，它還可以包含其它目錄，在其中的檔案夾稱為子目錄。子目錄也能包含更多的檔案和目錄等，而造成一個樹狀結構。其中的「主目錄」（或「根目錄」－名稱因作業系統而異）包含任意數量的其它目錄和檔案。目錄如同檔案一樣，可以給名（除了根目錄之外，根目錄通常沒有名稱）。運用目錄使得以邏輯方式來組織檔案變得更加容易。

當計算機允許使用目錄時，每個檔案和目錄不僅具有自己的名稱，而且還包含識別其所位於的路徑。在路徑中使用某種特殊字元（例如斜槓）來區分檔案和目錄名稱。例如在右圖範例中，/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。

 

## 注意

1. 在 RAM 中的一組位元組通常不叫做檔案，除非它們被存放在 RA 本機磁碟 (M) 中。
2. 在歷史上，檔案的定義是「記錄的序列」。現在這種定義不常用。