您當前的位置:首頁 > 體育

檔案字尾名和檔案型別是什麼關係、改字尾是否可以改變檔案格式?

作者:由 匿名使用者 發表于 體育時間:2013-04-21

檔案字尾名和檔案型別是什麼關係、改字尾是否可以改變檔案格式?知乎使用者2013-04-21 15:51:47

首先,什麼是檔案型別?

一個檔案就是一個位元組流,單單從檔案的角度,它是沒有型別可言的。

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

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

字尾名就起到這樣一個作用。字尾名是檔名的一部分,透過檔名中最後一個點號以後的部分來體現。

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

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

好吧,忘了回答核心的內容:改字尾名不能改變檔案格式,因為檔案符合怎樣的格式是透過它的位元組流來體現的。

檔案字尾名和檔案型別是什麼關係、改字尾是否可以改變檔案格式?匿名使用者2013-04-21 15:59:42

結論前置:

檔名和檔案內容是獨立不相關聯的,而檔案格式與檔案內容是相關的。檔名字尾僅用於提供給系統 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 檔案不報錯而已。

這種「相容性」實際上誤導了許多人對「檔名」和「檔案格式」這個基本概念的理解。

-

檔案字尾名和檔案型別是什麼關係、改字尾是否可以改變檔案格式?兔子大人2013-04-22 14:49:17

字尾和程式互相關聯,只是為了讓系統知道,這個程式用什麼開啟罷了。

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

假如私自更改成123。txt,那麼預設就會是記事本開啟,記事本不可以播放mp3檔案,就會錯誤。

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

直接更改字尾沒有改變檔案型別的本質。

檔案字尾名和檔案型別是什麼關係、改字尾是否可以改變檔案格式?對不起非凡哥2020-12-20 18:34:47

檔案字尾名與檔案不存在關聯

檔案字尾名最大的用處是告知使用者這是個什麼型別的檔案,在Windows下,系統也可以透過識別副檔名來方便使用者開啟這個檔案。但需要注意的是,一般情況下*檔案的字尾名只能起參考作用。因為字尾名相同的的檔案檔案型別不一定一樣(如。max),檔案型別相同的檔案,檔案字尾名也不一定一樣(如。jpg與。jpeg)。

因此事實上在大多數情**況下,你都可以隨意更改字尾名。但是當你更改字尾名後,你可能***需要為該檔案指定正確的開啟方式。同樣這也說明

更改字尾是不能改變檔案格式的

*,**:有些程式為了保證使用者的正確輸入,會強制驗證檔案的字尾名,這個時候更改字尾名會導致出現錯誤(如gcc編譯。c檔案時)。

***:例如在Windows下你需要指定檔案的開啟方式,而在Linux下你不需要。

標簽: 檔案  字尾名  開啟  程式  檔名