文件在不同文件系統間拷貝文件時間改變的問題


作者:eaglet

轉載請注明出處

我所做的系統需要比較文件時間和大小來確定兩個文件是否相同,但在運行過程中,經常會發現文件時間被莫名其妙的修改了1-2秒。這個問題我一直沒有仔細去研究,一直以為是微軟的一個bug,直到最近發現這個問題不搞清楚實在是不行了,系統經常會從服務器下載相同的文件。今天仔細研究了一下這個問題,發現並不是微軟操作系統的問題,而是文件系統設計的問題。

直接切入正題

FAT32 文件系統采用FAT表(文件分配表)來存儲文件的索引信息,為了盡量減少FAT表中每個文件占用的空間數量, FAT32 文件系統將文件大小限制為小於4GB, 文件時間精度限制為2秒,以偶數對齊。而NTFS文件系統采用的是MFT表(主文件表)來存儲文件的元數據,這個主文件表相當於一個小的數據庫,它可以存儲更多的元數據。所以NTFS文件系統無論是文件大小還是文件時間精度都遠遠高於FAT32. NTFS的文件精度是100ns。

由於兩種文件系統的文件精度不一樣,如果我們把文件從NTFS文件系統拷貝到FAT32文件,由於時間精度不同,文件時間將被強制以偶數對齊。

 

NTFS 時間: 7 hours 31 min 0 sec 000ms.
FAT 時間為: 7 hours 31 min 0 sec 000ms.

 
NTFS 時間: 7 hours 31 min 0 sec 001ms.
FAT32 時間為:7 hours 31 min 2 sec 000ms.


NTFS 時間: 7 hours 31 min 1 sec 000ms.
FAT32 時間為:7 hours 31 min 2 sec 000ms.

 
NTFS 時間:7 hours 31 min 1 sec 999ms.
FAT32 時間為:7 hours 31 min 2 sec 000ms.

 

從上面的例子我們可以看出NTFS 到 FAT32 ,文件時間最多會相差2秒。

我們在程序中如果要通過文件時間來判斷文件是否相同,一定要考慮到兩種文件系統的時間誤差的問題,否則會導致系統出現錯誤。另外用MD5 來判斷文件是否相同會更好一些,不過對於大文件,MD5的計算時間會比較長。

 

參考:

http://support.microsoft.com/kb/127830


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM