文件後綴名和文件類型是什麼關係、改後綴是否可以改變文件格式? | 知乎問答精選

 

A-A+

文件後綴名和文件類型是什麼關係、改後綴是否可以改變文件格式?

2019年09月13日 知乎問答精選 暫無評論 閱讀 3 ℃ 次

【狼大人的回答(12票)】:

結論前置:文件名和文件內容是獨立不相關聯的,而文件格式與文件內容是相關的。文件名後綴僅用於提供給系統 shell 一個關於文件類型的「暗示」。更改文件後綴名不會改變文件的「格式」,只會影響「系統默認打開這個文件的方式」。

文件是什麼?

文件是存儲在系統存儲空間(如磁盤)中的一段數據。一個文件由一個特定程序創建,包含了對這個程序有特定含義的一段字節序列,因此每次這個程序打開這同一個文件的時候,獲取到的信息是一樣的。其它能夠與上述程序以同樣方式理解這段內容的程序也可以從這個文件中獲取完全一樣的信息。這個「理解這段內容的方法」就是文件格式。同一段內容可以有不同的解讀方法,那麼我們可以認為它是同時屬於幾種有效格式。譬如下面一段

int main() {return 0;}

全部由可讀的 ASCII 字符組成,所以它是一個純文本文件;但熟悉 C 語言的人都可以看出這是一段 C 代碼;認為它是 C++ 代碼一樣不會出錯。

文件名是什麼?

由於磁盤本身空間巨大,且有大量程序共同訪問,一段內容存儲在磁盤中可能不是連續的,可能位置會發生改變;且磁盤地址並非人類可以輕易理解的內容,所以有了文件名和路徑。文件名和路徑用於幫助人(通過程序)查找到某個特定的文件;同時文件名本身也可以作為一個「標籤」告訴用戶文件的內容,比如 README.txt 可以看出是一份說明文檔。擴展名 txt 的部分也是類似,它只是這個文件的名字的一部分,用於告訴用戶「這是一個 txt 文件」。

擴展名有什麼用?

一個程序通常(或,默認)以一種特定的方式去讀取用戶要求它讀取的文件。譬如記事簿 notepad.exe 和 vi 編輯器會默認將用戶要求它打開的文件作為「純文本格式」打開——即,文件中所有內容都是 ascii 編碼、或其它系統默認編碼下可以直接被人類閱讀的文字。

用戶打開一個文件的時候,可以是先進入某個程序再選擇打開這個程序(File -> Open)或者在進入某個程序的時候同時打開某個文件(如 vi info.txt 命令);也可以通過在「文件管理器」或者其它 shell 程序中「雙擊」這個文件——讓系統幫助「找到」合適打開這個文件的方式。Windows 系統會根據文件擴展名部分,在一個數據庫中查找「可以打開這個擴展名文件的程序」,譬如 .doc 可以用 Word 打開,那麼用戶在雙擊一個 .doc 文件的時候,系統會自動啟動 Word 程序,並通知 Word 去加載這個文件。OS X 一方面參考文件的擴展名,一方面會參考文件的屬性(可執行權限)和文件內容(magic bits)去尋找合適的做法。

從這裡可以看出,Windows 系統在打開一個文件的時候,只根據文件名中的擴展名就可以找到對應的程序。第一段中的例子

int main() { return 0; }

如果被命名為 hello.c,則系統可以調用 Visual C++ 打開;而如果命名為 hello.txt,則系統會調用記事簿打開。

這也就是為什麼會有人認為,為什麼改了一個文件的擴展名是更改了這個文件的類型。實際上發生了變更的只是這個文件在系統中的默認打開方式;如果文件本身內容不符合程序對文件內容格式的預期,仍然是會出錯的。

同時,如果有幾個擴展名都默認使用同一個程序打開,則文件擴展名與文件格式不符的情況能否正確打開取決於程序本身。如我將一個 .jpg 文件的擴展名改為 .png,而兩者默認打開方式都是某圖像瀏覽器,則系統仍然會調用這個圖像瀏覽器打開這個文件;而這個瀏覽器是否對文件內容和擴展名不匹配的情況作出兼容處理還是報錯,則完全取決於程序本身。

Windows 用戶有一個「令人震驚」的習慣,即:右鍵單擊桌面 -> 新建 -> 新建文本文件,然後將文件名改為 xxx.doc,雙擊打開。這個操作實際上只是提示 Word 去打開這個文件;而 Word 恰好對於一個剛創建的,內容完全為空(一個字符都沒有)的偽?doc 文件不報錯而已。這種「兼容性」實際上誤導了許多人對「文件名」和「文件格式」這個基本概念的理解。

-

【bombless的回答(3票)】:

首先,什麼是文件類型?

一個文件就是一個字節流,單單從文件的角度,它是沒有類型可言的。

之所以有類型的概念,是我們先確定了一個文件格式,然後根據這個格式的規範組織文件的內容(組織字節流的內容),於是產生的這個文件就是我們所定的這種文件類型了。

那麼文件除了字節流還有一些內容,比如訪問控制,創建時間、修改時間等。另外有一個內容就是文件名。一些系統通過文件名來標記文件格式或者說類型。也就是說,在根據一定的格式創建文件時,因為文件本身沒有類型可言,我們可以在文件名上反映我們當初是根據什麼格式來創建這個文件的,這樣我們才能解釋文件的內容。

後綴名就起到這樣一個作用。後綴名是文件名的一部分,通過文件名中最後一個點號以後的部分來體現。

Excel 2007以後,微軟為什麼更改了文件名的後綴?其實嚴格來說它不必要改的,因為xls這個後綴用來標記了很多種不同的格式,除了常見的復合文檔作為容器,還有HTML和XML格式的文件都被微軟的一些程序以xls作為後綴。因此這個行為更多的是出於營銷的考慮。

還有一個問題是Excel 2007所推崇的格式是Excel 2003所不能解析的,所以使用新的後綴名可以讓人們更容易意識到這一點。

好吧,忘了回答核心的內容:改後綴名不能改變文件格式,因為文件符合怎樣的格式是通過它的字節流來體現的。

【Fan的回答(2票)】:

後綴和程序互相關聯,只是為了讓系統知道,這個程序用什麼打開罷了。

  • 比如說123.mp3可以指定酷狗打開,也可以指定foobar打開。

    假如私自更改成123.txt,那麼默認就會是記事本打開,記事本不可以播放mp3文件,就會錯誤。

    但是如果你指定*.txt關聯酷狗打開,那麼這個123.txt也是可以被酷狗打開且播放的。

直接更改後綴沒有改變文件類型的本質。

標籤:-計算機 -狼大人 -金融工程


相關資源:





給我留言