電腦檔案

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

## 歷史

電腦「檔案」一詞最早在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。

## 注意

- 在RAM中的一組字節通常不叫做文件，除非它們被存放在RAM disk中。
- 在歷史上，文件的定義是「記錄的序列」。現在這種定義不常用。

## 另閱

- 文件系統