操作系統是用什麼區分文件和文件夾的?
同一文件夾下面不能有重名文件,如圖
但是但是,下面的例子說明文件夾也是文件,那麼問題來了,學挖掘機技術哪家強?例子:
1. 在文件夾 Fold 下面新建文本文檔 File.txt,則接下來沒有辦法創建文件夾 File.txt;2.在文件夾 Test 下面創建文件夾 Test.wav,則接下來移動音頻文件(也不一定是音頻文件,主要看文件名)Test.wav會出現錯誤;3. 在文件夾 etc 下面創建同名文件和文件夾 hosts 只能成功一個,誰先創建誰成功。( * 這個問題發現於 WinRAR 解壓縮文件,本來問題要加個 Windows 的,但知乎的手機端提問游標老是亂跑,40 分鐘就提了這麼一個問題,算了,不加了。)
你要知道,之所以你覺得文件根文件夾不一樣,只是資源管理器和文件路徑這兩個東西給你的幻覺而已。你覺得文件好像就是放在文件夾裡面的。但是這怎麼可能呢?硬碟只是一個矩陣,哪裡有樹形結構的。都是幻覺。
其他答主已經說得很詳細了,就稍微形象地解釋一下:
目錄其實就是一種特殊的文件,拿FAT32來說,這個「文件」是由若干個32位元組的目錄項組成的,每個目錄項對應了這個目錄下的一個文件,它的的結構如下(簡單起見,不討論長文件名的情況):
(圖片自製,參考https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system)
注意屬性位元組中的目錄位,當這一位為1時,操作系統就會認為這是一個目錄。所以說白了文件和文件夾就是一個0和1的差別……目錄和文件都是目錄的表項,不區分的……
手機簡答,未來得及查代碼作嚴謹論述,如有錯誤還請輕拍,改天電腦上詳述
============這個問題其實跟操作系統沒有什麼關係,只有有些比較「弱」的系統,將操作系統本身和某種文件系統類型進行綁定…拿典型*nix文件系統類型: ext 來說,文件和文件夾,它們定義還真的是不一樣的。雖然它們在系統看來,都是一個inode帶著一堆數據。但是他們inode類型是不一樣的。文件夾類型表明這個inode是一個容器,還可以有下層的inode。
而對於早期FAT而言,似乎沒有類似的inode概念,記憶中是通過文件分配表(專門的一塊區域來記錄文件夾和文件的信息,但不包括文件數據)。文件是有起始簇號的,文件夾似乎不一樣…這段論述,完全憑記憶。改天再完善。我個人理解是,本質上講,文件和文件夾的差異,主要看這個文件系統數據存儲是如何定義的。我了解的文件系統,它們是有差異的。因為通用文件系統設計時,需要將文件夾設計成容器的概念,而文件則不需要這樣的概念。為了能對一個文件進行正確的存取,必須為文件設置用於描述和控制文件的數據結構,稱之為「文件控制塊FCB」。文件與文件控制塊一一對應,而人們把文件控制塊的有序集合稱為文件目錄,即一個文件控制塊就是一個文件目錄項。通常,一個文件目錄也被稱做是一個文件,稱為目錄文件。
文件控制塊中通常含有三類信息,基本信息(文件名,文件物理位置,文件邏輯結構,文件物理結構什麼的),存取控制信息(許可權),使用信息(建立的日期時間,上一次修改時間,是否被其他進程使用等等)。而在檢索目錄文件的時候,只用到了文件名,僅當找到一個目錄項的時候,才需要從該目錄項中讀取文件的物理地址。
而且為了提高文件系統的靈活性,應允許一個目錄文件中的目錄項既可以是作為一個數據文件(就是非目錄文件了)的FCB,又可以作為一個目錄文件的FCB。
也就是說,在操作系統中,目錄與文件,都是文件,在父目錄文件中表示的形式都是FCB,所以,當你在某一目錄下已經有了一個叫test.txt的文件時,這個文件的FCB就存在於目錄文件之中了,你再新建一個叫test.txt的文件夾,系統會首先掃描當前目錄文件的文件目錄項,發現已經有一個名字叫test.txt的FCB了,所以無法再次新建一個名字為test.txt的FCB,所以文件夾新建失敗。
手機碼字,有錯誤請告知。
文件,文件夾都是由具體的操作系統定義的。文件可以理解為一塊有特殊結構的存儲區區域(當然也可以不用有什麼特殊結構,比如隨便一個二進位文件.bin);文件夾可以理解為一個特殊的數據結構,簡單點說就是為了歸類用的,數據結構記錄了都有哪些文件在這個文件夾下,一般以文件名作唯一標識(所以不能重名),類比為,你就是一個文件夾,你一家人都姓李,所以你是老李家的,這個「老李家」就是你所在的文件夾,而這個老李家只是個虛無的名稱結構體而已,同樣在你家,你不可能重名。當然你在win下或者linux下看到的那個黃色的小文件夾圖標,完全是操作系統為了方便操作可視化的結果。你要是用命令行,還是得一個字元的一個字元輸入,cd 啊,touch啊,mkdir啊。。等等。。你要是學CS相關的就懂了。。不懂的話網上搜一搜也能大概了解。。就醬。
Everything is a file (descriptor),所謂的區別只是文件格式上的區別
這個鍋要 圖形化操作界面 來背,讓人感覺文件夾和文件有層屬關係,其實不然,就像一個班級,老師是文件夾,學生是文件,都在一個大食堂里就坐,有很多老師,有很多學生,校長那裡有全校的班級表,如果班級表丟失,食堂就亂套了,在磁碟中,就有一或兩張物理碟片,上邊是一圈一圈的儲存單元,文件管理器掌管著所有的註冊過的文件(夾),文件的增刪改查都需要經過它來處理,如果它的文件表出現問題不能恢復,這快硬碟數據基本也就廢了,重做文件系統,文件表幾乎是空白的,由於數據本身並不具有物理體積,雖說原來的儲存陣列上的位元組還在,但也不能正常讀出,表現在客戶界面上就是可用空間增加,就像清空了那樣。
如若想要恢復需要文件,可能要藉助文件恢復工具,但是幾乎都不能百分之百的恢復成原來的樣子 (目錄結構)。
老師和學生都是肉。文件夾其實就是個路徑,是放在文件裡面的,inode指向block,如果block是文件夾的話(路徑),會指向下一個inode, 如果裡面存的是內容,就全搞定了~
回家更示意圖做了類似tag標記而已。所以微軟win7引入了庫的概念(其實在winxp的時候媒體播放器就已經有了雛形),讓你們拋掉文件夾文件的概念。你以為整整齊齊一類文件放在一個文件夾裡面?其實都是幻覺,硬碟上的文件系統的數據根本就沒這麼整齊好嗎!但是因為樹形目錄太根深蒂固,先入為主,所以庫這個先進概念在windows系統還沒得到施展…………悲哀。
完全不區分。不是很熟悉NTFS,這裡簡單介紹一下EXT,希望對題主有幫助。首先介紹一些零散的知識,在硬碟中,inode block和data block是預先設定好的,換句話說,已經預定好哪些block 是inode block,哪些是data block。開機時,會在內存中初始化VFS(virtual file system 虛擬文件系統),然後由CPU判斷將哪個硬碟中的文件系統掛載到VFS上,VFS相當於給CPU提供了一個統一的介面。掛載時,會初始化一個根目錄「.」。目錄中存儲文件的名字和對應的inode number。EXT的結構,分為:super block,inode bitmap, block bitmap, inode table, data block。前三部分稱為metadata, 兩個bitmap 裡面存的都是0和1, 負責記錄哪些inode block data block是available的。inode table存對應文件除了文件名以外的所有信息,比如更新時間,文件大小,儲存該文件數據的data block的number,而目錄(也就是題主此處說的文件夾)中存文件的名字和對應的inode number。需要注意的是,目錄也是一種文件,創建的時候需要佔用一個inode,而對應的data block則存目錄的內容,內容則是該目錄下所有文件(文件夾)的名字和對應的inode number。題主可以理解為文件夾存的是路徑。軟鏈接,硬鏈接有空再補。想了解比較詳細的內容可以去擼一遍龍書。想到哪寫到哪,比較亂,抱歉。
看看unix的文件系統實現就明白了,有興趣就看看這個mit的xv6操作系統源碼分析的中文翻譯項目:deyuhua/xv6-book
操作系統中一切存儲在硬碟中的數據集合都是文件,目錄和文件只是圖形化中為了可視化所做的區分,目錄叫目錄文件吧,每個文件都有FCB(文件控制塊)+文件數據;目錄只是文件數據部分是目錄項,目錄項記錄了在這個目錄下的其他文件,單純一個文件的話,除了FCB還有就是具體的文件數據部分了。
印象中 文件夾也是文件 只不過交互界面讓人認為文件夾是容器而不是文件
很簡單。目錄就是文件夾,目錄條目定向頁是文件。整本書就是除操操作系統之外的軟硬體,操作系統就是你自己。很通俗$。@
操作系統維持一個數據結構,裡面有個欄位位表示文件類型,比如目錄文件,常規文件等
15年前學過dos,印象中所有date都是以file形式進行管理,index只是file的一種格式
手機簡答。
不區分。文件夾不過是一個可以被文件管理器打開的文件而已。文件系統實現時對文件夾內容格式有要求,但本質和應用程序對文件格式要求沒有區別。
以上。學習在powershell里使用ls命令以展示當前文件夾下的所有文件、文件夾。
推薦閱讀:
※win7 如何實現定時開機、喚醒睡眠 休眠?
※Windows 7 讓你最爽的體驗有哪些?
※收費的 Windows 為啥能成為消費市場最主流的操作系統,而免費的Linux不能?
※如何在 Linux 下安裝 Windows 7?
※64 位 Windows 7 系統。以前 2G 內存,不開程序基本佔用 800M 左右;現在又加了 2G 內存,不開程序基本佔用1.5G。為什麼會增加?
TAG:MicrosoftWindows | 操作系統 | 文件 | 文件夾 |