【问题标题】:Does DSOFile.OleDocumentProperties.Save modify file?DSOFile.OleDocumentProperties.Save 是否修改文件?
【发布时间】:2012-11-01 07:45:04
【问题描述】:

DSOFile.OleDocumentProperties.Save 修改与 NTFS 上的文件关联的元数据。

它会修改文件本身,这意味着校验和会改变吗?
还是只是修改了文件的一些 NTFS 元数据,但校验和保持不变?

关于 DSOFile 的更多信息:KBTechnet

Credit:这实际上是 Ilmo 在this question 内的自我审问。

【问题讨论】:

    标签: ole dsofile


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常有趣!任何对此的参考将不胜感激,即使我猜文档很少......
    • Microsoft KB 实际上已经在使用自定义应用程序中的 DsoFile 组件 部分进行了简要说明,但没有技术细节。它确实解释了何时适用,何时不适用。 NTFS 文件流在 MSDN 中一般都有描述,但 NTFS 结构和工作原理的内部细节不会在 Microsoft 站点中找到。这可以在其他地方找到。
    • 通过那个标记(对不起,我知道这是一个旧答案)应该手动将自定义属性添加到 OLE 文档,然后将其删除,因此不会产生相同的 MD5 校验和......我是当然问,因为它没有。我看到属性被成功删除,文件看起来完全相同的属性(最后修改除外)并且文件大小(以字节为单位)是相同的。我想知道最后修改日期是否会影响 MD5 校验和,因为它存储在您描述的文件中。
    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多