題 如果有數據,磁盤上文件的大小如何為0字節?


我在Windows 10中有一個文件,有362個字節的數據,但“磁盤上的大小”只是0個字節。這是一個簡單的“Hello world”程序,用彙編編寫,並保存在 記事本+ +

當文件大小為362字節時,磁盤上的大小如何為零?

我有一個SSD,而不是普通的硬盤。

屬性對話框的屏幕截圖:

Screenshot of the Properties dialog


97
2018-01-24 23:00


起源


簡短回答:如果磁盤上沒有額外的空間來存儲其內容。 - David Schwartz
@Thomas不重複。這個名字聽起來很相似,但是這個問題是為什麼Windows聲稱零字節文件為零大小,儘管需要在某處註冊。這個問題詢問為什麼即使文件中有數據,磁盤上的大小也可以為零。 - Ben N
有關: 大文件如何具有零“磁盤大小”值? - BlueRaja - Danny Pflughoeft
@BenN標記它不合適因為你是對的肯定不是重複。 - William
嗨Coder88,我相信將你的帖子標記為重複的人是錯的 - 另一個問題是問一些不同的東西;你真的問過一個好問題。如果您打算表明您的問題已經解決,可以單擊答案旁邊的複選標記。 - Ben N


答案:


如果文件太小以至於其內容和文件系統簿記適合1KB,則會發生這種情況。為了節省磁盤空間,NTFS將小文件保留為“常駐”,將其內容存儲在文件記錄中,因此不必為其分配任何群集。因此,磁盤上的大小為零,因為文件記錄之外沒有任何內容。一旦文件變得足夠大,NTFS就會使它“非常居”,為它分配一個或多個集群(在磁盤上創建非零“大小”),並在文件記錄中創建一個“映射對”,代替數據到指向群集。

SSD硬盤或Windows 10不會影響這一點;它只是一個NTFS功能。進一步閱讀: NTFS文件增長的四個階段

請注意,“磁盤大小”指標並不完全正確。例如,它永遠不會包含NTFS文件記錄佔用的常量1KB。該指標是在Windows 95中引入的,它沒有使用NTFS,因此無法解釋這種現象;它只顯示文件大小四捨五入到群集大小的下一個倍數。儘管它們之間的許多Windows版本使用NTFS和常駐存儲,但該估算算法仍然適用於Windows 7。它最終在Windows 8中進行了更新,以計算磁盤上只有常駐數據為零大小的文件。進一步閱讀: 什麼是'磁盤大小'?


150
2018-01-24 23:14



有那麼一刻,我以為我們正在研究重複數據刪除的效果(blog.fosketts.net/2012/01/03/...)但我相信該功能的工作水平是透明的,如“磁盤大小”指標。 - misha256
但是等等......我無法複製我的NTFS卷上的OP行為(Windows 7)。無論我如何創建微小的文件(有些只是一個字節長),它們都會佔用 4KB “磁盤空間”根據“文件屬性”對話框。嗯... - misha256
@ misha256嗯,我可以在Windows 8.1下用~700字節以下的文件重現它。我的猜測是,算法在Windows 7和8.1之間變得更加智能,因為最初,它不知道任何花哨的NTFS東西(資源)。請注意,一旦文件進入第二階段,它就不會縮減。 - Ben N
@Philipp我想有人可能會爭論。傳統上,“磁盤上的文件”是“已分配集群的大小”(例如,您可以看到選擇太大的集群大小的影響)。據我所知,它從未包含文件系統所需的“目錄”空間(例如“目錄條目”的大小或“FAT條目鏈的長度”)。 - TripeHound
@Philipp:無論如何,包括文件大小的簿記會變得很快:你如何描述一個包含3個名字的1-cluster文件? - Deduplicator