【问题标题】:How can you identify a file without a filename or filepath?如何识别没有文件名或文件路径的文件?
【发布时间】:2016-11-29 00:03:24
【问题描述】:

如果我给你一个文件。您可以读取文件,但不能更改或复制它。然后我拿文件,重命名,把它移到一个新的位置。您如何识别该文件? (相当可靠)

我正在寻找我是否有一个程序的媒体文件数据库并且用户更改了文件的位置/名称,我是否可以通过搜索目录并查找某些内容来找到该文件。

【问题讨论】:

  • 一个想法是记住文件的哈希值和文件长度。
  • You can read the file but you can't change it or copy it
  • 而且你可以边复制边改。
  • 在 NTFS 或 ReFS 文件系统上,至少,只要文件保留在同一个卷上,它就会分配一个唯一的 ID,即使文件被移动、重命名、修改,它也会保持不变等。例如,该 ID 可以与 OpenFileById() 一起使用。在检查两个文件句柄是否引用同一个文件时,您可以检查它们是否具有相同的 ID,而不是比较它们的文件路径。您可以使用 GetFileInformationByHandle/Ex() 检索文件的唯一 ID。
  • 将该文件的 MD5 Sum 或 SHA1 保存在该文件的数据库中。

标签: windows file identity uniqueidentifier identify


【解决方案1】:

我已经做到了,这并不难。

我获取文件和文件大小的 256 位哈希(我忘记了我使用了哪个例程)并将其写入表中。如果它们匹配,则文件匹配。 (而且我认为跟踪大小比必要更偏执。)为了加快速度,我还将该哈希折叠为 32 位值。如果 32 位值匹配,则检查所有数据。

为了性能,我保留了我检查过的最后 1000 万个文件。 32 位值进入一个完整读取的文件中,当需要检查主记录时,我拉入其中的一个“页面”(我忘记了具体有多大),该页面被填充以使其与磁盘对齐。

【讨论】:

    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多