從結論上來講,幾乎是給人看的,但是也有計算機識別用的因素在裡面

首先你要知道的是,應用程序本身是不關心文件名的,當然也不關心後綴名。各種不同的文件格式一般都有自己的規約來確認如何構建一個可用的合法文件,比如PNG格式就顯式規定了4個數據塊以及每一個數據塊應該如何組織。程序識別一個PNG文件依靠的主要就是這4個數據塊,而不是文件名。即使你把後綴名從PNG改成了JPG,程序也依舊有能力根據4個數據塊來判斷這是一個PNG文件而不是JPG文件。從這一層意思上來講,後綴名是給人看的。

但是從另一個角度上來講,操作系統需要知道哪一種文件應該交給哪個應用程序處理。比如你雙擊了一個PNG文件,操作系統就需要查找文件類型關聯表來決定使用windows畫圖或者Photoshop或者照片應用程序來處理它。當你修改了後綴名為docx時,操作系統就會查表調用WPS或者Microsoft Office來打開它,那自然是無法處理的。不過這種不常規的操作只能徒增用戶的麻煩而已,並沒有什麼實際意義。事實上,用戶也可以手動指定單個文件或者一類文件的打開方式。

所以,只有用戶才關心文件類型,計算機根本不關心。一切文件都可以使用記事本打開,因為TXT格式沒有什麼特別的格式規範。至於處理的結果是否正確,也只有用戶才知道,計算機既不知道也不關心。


我覺得都有。

windows會默認隱藏後綴名,並且根據後綴名選擇用什麼程序打開這個文件。windows利用了後綴名,並不打算給人看,說明windows的設計者認為,後綴名主要給機器看。

linux下提供了一個叫file的命令,用來識別文件類型,這個命令會看文件內容,而不僅僅是後綴名。

不同的系統有不同的設計哲學,不能一概而論。


僅就windows而言,是給操作系統看的。當你雙擊某文件的時候,操作系統根據後綴名來決定用什麼應用程序來打開它。

剛裝好的win10系統是默認隱藏文件的擴展名(後綴名)的。操作系統將文件擴展名處理成圖標,方便人看。

看下面幾張圖,就很清楚了:1有擴展名有圖標,2有擴展名無圖標,3無擴展名有圖標,4無擴展名無圖標。

有擴展名有圖標

有擴展名無圖標

無擴展名有圖標

無擴展名無圖標

所以很明顯可以看出來,1和3符合大多數人的使用習慣,而2和4,不管有無擴展名,都會給人感覺像電腦壞了或者中了病毒一樣。


那麼,給計算機識別,又是具體給誰識別呢?答案是windows操作系統。當操作系統不知道用什麼應用程序打開時,會問你。比如我雙擊剛才的「隨機後綴.233」,會彈出下面這樣的框框:

一旦你選擇了一個應用(比如此處我隨便點了一個Adobe audition),那麼操作系統就會記住,以後233文件要用Au打開。為了讓你知道它記住了,操作系統會給你填上Au的圖標,就像這樣。

以後你只要雙擊*.233的文件,就會彈出Au。當然,Au也不認識這個文件,所以它會報錯。

但是注意,它報錯不是因為不認識文件擴展名,而是因為不認識文件的內容。比如我把一首歌改後綴名.233,雙擊打開Au,是正常的。

所以說,擴展名決定了操作系統選擇哪個應用打開文件,而一旦文件被打開了,就由應用程序決定把文件按照什麼格式讀取,比如圖片查看器只會把文件按圖片讀取,音樂播放器只會把文件按音樂讀取,等等,這時就與擴展名無關了。


某種後綴名與某個應用程序的關聯寫在註冊表中,供操作系統讀取。在安裝應用程序時,一般會寫一些註冊表。

(如果是流氓軟體,卸載的時候這些註冊表不會被刪掉,就變成了系統中的垃圾,造成系統卡慢)

如圖所示,打開註冊表編輯器,可以在這裡查看擴展名對應的文件用什麼打開。

這些都是擴展名。其實大多數註冊過的擴展名還是我們不認識的。我們只會用到少數幾種。

比如大家都很熟悉的docx。

當我選擇.233文件的打開方式是Au時,這個擴展名就被當場註冊了。如下圖所示。

當然同時註冊的還有好幾處,我現在都沒刪乾淨。。。


最後是彩蛋:

誰能告訴我「螺旋貓」是怎麼出來的...


windows系統根據後綴判斷文件關聯,然後啟動相應程序打開文件。

linux根據文件頭判斷文件類型,與後綴無關。

所以給人看還是給系統看,在不同操作系統間是有區別的。


給人看的,同時可以定義該後綴的默認打開方式。計算機識別文件是從文件頭來區分文件的內容。


主要是給程序識別的,在Windows的註冊表裡存儲了各種不同的後綴名(擴展名)對應的操作或者用什麼程序打開,改變後綴名並不會改變文件內容,但是會改變處理這個文件的方式,把音樂文件(.mp3)改成文本文件(.txt)就會默認用記事本打開,然後自然就是一堆亂碼。不過如果是源代碼文件,例如Python的代碼(.py)本質就是文本文件,如果你裝了Python的IDE,默認會直接用IDE打開,因為這個IDE會修改註冊表內容使之與(.py)文件關聯,如果 你改成(.txt),電腦會默認用記事本打開它 ,當然也能看到代碼的內容。這個在其他操作系統也是類似的原理。

當然,在給計算機識別的同時,也有給人看的意義,比如你看到這個擴展名是mp3,你會優先考慮它是音頻文件,但是僅起識別作用,因為擴展名是可以隨便改的。

——————分割線———————

建議在Windows里設置為顯示所有文件的擴展名。曾經遇到過一種病毒,通過u盤傳播,它會隱藏你的文件夾,然後把自己的名字改成那個文件夾名字,並且把圖標改成那個文件夾的圖標,當u盤插入新的電腦時,如果用戶沒有注意,就會打開那個病毒程序,但是如果設置為顯示擴展名,就會顯示為xxxxx.exe這樣一眼就看出問題了。


對於普通用戶來說,操作系統會選擇隱藏文件後綴名。

而計算機/軟體其實更需要後綴名來識別文件具體是啥。

有的人說,計算機只需要讀文件頭就能正確的打開文件了。其實這個說法在很多時候是不正確的。

比如,如何讓計算機通過文件頭準確的分辨.txt/.html/.lua/.js/.cs/.c/.cpp/.css/.ts/.py/.h/.ruby/.json/.xml/.ini/.sln文件呢

如何讓計算機通過文件頭分辨.zip/.apk/.ipa文件呢


後綴名僅僅是約定俗成而已。

如果你自己編寫程序,你可以使用前綴名來規定文件格式,比如text.abcde;或者不使用前後綴,比如TEXTabcde。

只不過,人們習慣用前綴名表示文件的個性化名,後綴名表示文件的格式化名。

所以,後綴名是寫給人看的。計算機對文件的前後綴不感興趣。


Windows操作系統:

既是給人看的,又是給操作系統看的。人可以根據文件後綴判斷這是個什麼文件。操作系統也可以根據後綴來採取相應的解析格式(解析方法)來讀取文件。改變了原有的文件後綴,也許程序就運行不成功了。

Linux操作系統:

文件後綴,就是給人看的。改變文件後綴,對文件的讀取沒影響。


後綴名的一個重要作用是區分文件和文件夾。

假設文件沒有後綴名,那麼給定一個路徑/home/user/a/b/c,作為用戶,無從知曉c到底是文件還是文件夾;若文件帶有後綴名,如/home/user/a/b/c.bin 則用戶可以輕易判斷出c.bin是文件。

從這個角度說,後綴名是給人看的。


給操作系統看的。人只看圖標不看後綴的,操作系統(Windows和macOS)根據後綴知道文件類型然後用關聯程序打開,並且展示個圖標。Linux 可以不要後綴,但是部分程序需要看後綴。


既是給人看的,也是給計算機識別用的,不過最終還是給人看的。

因為計算機只認01並不識字。


給人看的,因為只有人才會去關心數據在程序的運行之後是如何表現的,或者只有人本身才會去評價程序運行結果是否符合預期。本質上文件都是存儲於硬碟上的01位元組流,你可以把一個txt文件強行要求美圖秀秀之類的圖片瀏覽器打開,然後這些軟體會按照特定的格式去解析這個文件的位元組流,在處理的時候發現某些標識符或者內容對不上,於是拋出異常,你就會看到軟體顯示一個空白內容的圖片或者乾脆提示「圖片已經損壞」。

所以,從設計初衷來說,文件名後綴是為了讓人知道這些數據需要使用怎樣的流程和演算法去進行處理而打上去的標記。但是人總歸是一種懶惰的生物,成千上萬的文件類型對應什麼樣的軟體去進行處理,這事不論是溝通還是記憶上都是付出巨大的成本,所以大家在操作系統里加入了這麼個機制,將後綴名與處理程序做對應,把這事交給電腦來。所以設計初衷是給人看的,為了減輕人的負擔,後來把這個任務移交給了操作系統,所以說給電腦識別也是正確的。


不同系統,後綴名的作用不一樣。

Win下,後綴名是操作系統決定用什麼程序打開該文件的依據,操作系統靠識別後綴名決定以什麼方式(程序)打開。所以,是給系統看的,並默認不展示(顯示)後綴名。但仍可以手動指定(右鍵,打開方式)。

更改後綴名對文件內容沒影響,一首歌把後綴名改成jpg,用播放器仍可以打開並播放。

Linux操作系統下,無任何影響,一切皆為文件,任何類型的文件都可以以文本方式打開並編輯。故是給人看的。


。。。這個問題取決於你所使用的操作系統。

在Windows下,後綴名是給操作系統看的

而在Linux下,後綴名是給人看的,Linux不會在意後綴名是什麼,而是根據文件內容判斷類型。。。


看了下前面回答都是基於Windows的

反正基於Linux操作系統的計算機的後綴名是給用戶看的

(不知對否,手動狗頭)


一般用戶來說是不需要後綴名的

這個東西更多是給操作系統的一種標識,在這裡其實也是處理一般用戶需求的那部分才需要,特殊需求完全可以terminal/command里用指定的命令/程序打開指定的文件。

不過現在很多程序也需要這種標識,比如gcc默認後綴名區分.c,.cpp,.java……

當然這部分程序都有一個特點,就是處理的文件類型和用戶閱讀、編輯關係很大。因為文本的易編寫、易讀取、易解析,對用戶和程序來說都方便,所以代碼大多都是純文本文件。

還有一類文件是多個部分使用壓縮打包方式打包到一起的【常見的有docx,pptx,xlsx,apk,jar,某些視頻格式】,這些大多是內部組成部分數量大,需要一種打包技術把各個部分組合到一起,並且格式標準共享性比較大的一些格式。這類格式有個特點,就是用解壓縮軟體能打開,能解壓,當然解壓出來的內容可能人已經看不懂了


目的是給計算機看,但是不怎麼靠譜。

為了判定文件格式,有很多種方法。其中之一就是文件擴展名(extension)。但是這玩意可以很輕鬆的修改,Windows會警告你,修改後綴名可能會導致文件「不可用」。這些個擴展名應該用什麼樣的軟體打開,註冊表裡面都綁定了的,如果你改了,它就不知道怎麼打開。但是,是個視頻,就算沒了後綴,你手動給他拖到視頻播放器,還是可以播放,沒有影響。通過擴展名判斷文件格式很方便,但是也不太靠譜。

還有就是元數據(metadata),在文件頭部或者尾部一些區域存放文件的信息。比如圖片的exif數據。

還可以通過幻數(magic number)判斷格式。比如GIF文件開頭的GIF87a、GIF89a什麼的,png文件的%PNG等等。因為遵守的標準不同,判斷起來還是挺麻煩。文本文件就通過特定的字元串標註格式,html文件開頭的&或者xml文件的&

還有把文件元數據與數據主體拆開,存到系統裡面的也有(external metadata)。

在互聯網上傳多媒體數據的時候,經常使用的是 MIME 類型。

所以,還是擴展名最方便。


linux里是給人看的,linux下的很多文件連後綴名都沒有,這些文件有文本文件,也有應用程序。

Windows里是給操作系統看的,Windows會根據文件後綴名決定打開的程序,如果你刪掉後綴名,那麼Windows就不知道怎麼打開了。


先是給人看的,再是給機器看的。

遇上了沒有默認打開程序的文件你怎麼辦?先看文件後綴,然後選擇適合的程序。遇到了呢?只是跳過了給你看得這個步驟,萬一打開錯了呢,本來想用瀏覽器打開html文件,結果給我跳到vscode去了


推薦閱讀:
相关文章