2012-11-01 28 views

回答

3

这取决于文件格式和文件所在的文件系统。

如果文件是OLE格式,文件本身将被修改,因为属性包含在文件中。这将导致文件数据被修改并且其大小可能会改变。任何文件哈希生成器(如CRC,MD5,SHA1等)都会产生不同的结果,在其中一个属性发生更改之前和之后。

如果该文件不是OLE格式,则所有属性都将保存在一个或多个NTFS文件流中,这些文件流与文件数据在物理上是分开的。这会导致文件上次修改时间发生更改,但不会导致修改文件数据,也不会更改大小。假设程序没有考虑文件的上次修改时间及其文件流,文件哈希生成器会在更改其中一个属性之前和之后生成相同的结果。对于非NTFS文件系统,OLE文档属性不适用于所有文件。

+0

非常有趣!任何参考资料都将不胜感激,尽管我猜文档很少... –

+0

微软的KB实际上已经在第*节中使用了DsoFile组件,但没有技术细节。它确实解释了它何时适用以及何时不适用。 NTFS文件流通常在MSDN中有描述,但在Microsoft网站中找不到NTFS结构和工作的内部细节。这可以在别处找到。 – Jay

+0

通过该令牌(对不起,我知道这是一个旧的答案)应手动添加一个自定义属性到一个OLE文档,然后将其删除,因此,然后不会导致相同的MD5校验和...我当然要问,因为它不'吨。我看到属性被成功移除,并且文件的外观与上次修改时的属性完全相同(文件大小以字节为单位)是相同的。我想知道最后的修改日期,因为它存储在文件中,如您所描述的那样会影响MD5校验和。 –