1. 程式人生 > >檔案大小和檔案佔用空間的區別

檔案大小和檔案佔用空間的區別

1.“檔案大小”與“所佔空間”的差別
為了便於大家理解,我們先來看兩個例子:
例1:找到D盤上的Ersave2.dat檔案,用滑鼠右鍵單擊該檔案,選擇“屬性”,即可開啟對話方塊,我們可以看到,Ersave2.dat的實際大小為655,628 Byte(位元組),但它所佔用的空間卻為688,128 Byte,兩者整整相差了32KB。
例2:同樣是該檔案,如果將它複製到A盤,你會發現該檔案實際大小和所佔空間基本一致,同為640KB,但位元組數稍有差別。再將它複製到C盤,檢視其屬性後,你會驚奇地發現它的大小和所佔空間的差別又不相同了!
顯然,在這三種情況中,檔案的實際大小沒有變化,但在不同的磁碟上它所佔的空間卻都有變化。事實上,只要我們理解了檔案在磁碟上的儲存機制後,就不難理解上述的三種情況了。檔案的大小其實就是檔案內容實際具有的位元組數,它以Byte為衡量單位,只要檔案內容和格式不發生變化,檔案大小就不會發生變化。但檔案在磁碟上的所佔空間卻不是以Byte為衡量單位的,它最小的計量單位是“簇(Cluster)”。

小知識:什麼是簇?
檔案系統是作業系統與驅動器之間的介面,當作業系統請求從硬盤裡讀取一個檔案時,會請求相應的檔案系統(FAT 16/32/NTFS)開啟檔案。扇區是磁碟最小的物理儲存單元,但由於作業系統無法對數目眾多的扇區進行定址,所以作業系統就將相鄰的扇區組合在一起,形成一個簇,然後再對簇進行管理。每個簇可以包括2、4、8、16、32或64個扇區。顯然,簇是作業系統所使用的邏輯概念,而非磁碟的物理特性。
為了更好地管理磁碟空間和更高效地從硬碟讀取資料,作業系統規定一個簇中只能放置一個檔案的內容,因此檔案所佔用的空間,只能是簇的整數倍;而如果檔案實際大小小於一簇,它也要佔一簇的空間。所以,一般情況下檔案所佔空間要略大於檔案的實際大小,只有在少數情況下,即檔案的實際大小恰好是簇的整數倍時,檔案的實際大小才會與所佔空間完全一致。

2.分割槽格式與簇大小
在例2中,同一個檔案在不同磁碟分割槽上所佔的空間不一樣大小,這是由於不同磁碟簇的大小不一樣導致的。簇的大小主要由磁碟的分割槽格式和容量大小來決定,其對應關係如表1所示。
筆者的軟盤採用FAT分割槽,容量1.44MB,簇大小為512 Byte(一個扇區);C盤採用FAT 32分割槽,容量為4.87GB,簇大小為8KB;D盤採用FAT 32分割槽,容量為32.3GB,簇大小為32KB。計算檔案所佔空間時,可以用如下公式:
簇數=取整(檔案大小/簇大小)+1
所佔空間=簇數×磁碟簇大小
公式中檔案大小和簇大小應以Byte為單位,否則可能會產生誤差。如果要以KB為單位,將位元組數除以1024即可。利用上述的計算公式,可以計算ersave2.dat檔案的實際佔用空間。

3.輕鬆檢視簇大小
①用Chkdsk檢視簇大小
在Windows作業系統中,我們可以使用Chkdsk命令檢視硬碟分割槽的簇大小。例如我們要在Windows XP下檢視C盤的簇大小,可以單擊“開始→執行”,鍵入“CMD”後回車,再鍵入“C:”後回車,然後輸入“Chkdsk”後回車,稍候片刻從它的分析結果中,我們就可以得到C盤的簇大小,不過它把簇稱之為“分配單元”或者“Allocation unit”。
②用PQ Magic等磁碟工具來檢測
很多磁碟工具都具備磁碟資訊顯示等功能。例如在PQ Magic中,選擇要檢視的磁碟分割槽,然後單擊右鍵選擇“高階→調整簇大小”功能,即可從顯示的對話方塊中可以看到該磁碟當前設定的簇大小。
③手工檢視
手動建立一個100位元組以下的文字文件。然後將該檔案複製到欲檢視簇大小的磁碟分割槽中,在Windows下顯示該檔案的屬性,其中“所佔空間”處顯示的數值就是簇大小.