2012-11-01 35 views

回答

3

這取決於文件格式和文件所在的文件系統。

如果文件是OLE格式,文件本身將被修改,因爲屬性包含在文件中。這將導致文件數據被修改並且其大小可能會改變。任何文件哈希生成器(如CRC,MD5,SHA1等)都會產生不同的結果,在其中一個屬性發生更改之前和之後。

如果該文件不是OLE格式,則所有屬性都將保存在一個或多個NTFS文件流中,這些文件流與文件數據在物理上是分開的。這會導致文件上次修改時間發生更改,但不會導致修改文件數據,也不會更改大小。假設程序沒有考慮文件的上次修改時間及其文件流,文件哈希生成器會在更改其中一個屬性之前和之後生成相同的結果。對於非NTFS文件系統,OLE文檔屬性不適用於所有文件。

+0

非常有趣!任何參考資料都將不勝感激,儘管我猜文檔很少... –

+0

微軟的KB實際上已經在第*節中使用了DsoFile組件,但沒有技術細節。它確實解釋了它何時適用以及何時不適用。 NTFS文件流通常在MSDN中有描述,但在Microsoft網站中找不到NTFS結構和工作的內部細節。這可以在別處找到。 – Jay

+0

通過該令牌(對不起,我知道這是一箇舊的答案)應手動添加一個自定義屬性到一個OLE文檔,然後將其刪除,因此,然後不會導致相同的MD5校驗和...我當然要問,因爲它不'噸。我看到屬性被成功移除,並且文件的外觀與上次修改時的屬性完全相同(文件大小以字節爲單位)是相同的。我想知道最後的修改日期,因爲它存儲在文件中,如您所描述的那樣會影響MD5校驗和。 –