【问题标题】:Unique file ID in FAT32FAT32 中的唯一文件 ID
【发布时间】:2014-10-22 13:09:16
【问题描述】:

开发环境:Android中的移动应用

我正在寻找一种方法来唯一标识 FAT32/VFAT 文件系统(没有 inode)中的文件。 我考虑过散列(SHA1?)完整路径。这个解决方案的问题是它不支持移动/重命名。

有没有更好的东西,即使在移动/重命名文件时也能保持?

谢谢

【问题讨论】:

  • 散列文件名不会是唯一的 - 你可能有多个 README.TXT... 同样,如果两个文件具有相同的内容,散列文件的内容可能会遇到冲突(但我不确定你需要多么“独特”——也许这是可以接受的),但移动/重命名文件会很好。您可以使用文件的起始块编号,但如果文件被移动/复制,则会更改 ID。这将是您可以获得的最接近 i-node 编号(在移动/重命名时也会更改)。
  • @twalberg 我的意思是散列完整路径文件名,而不仅仅是文件名本身。 “起始块编号”是什么意思?是否保证同一个块中不能有2个文件?如何在 C/C++ 或 POSIX 中获取这些信息?

标签: file filesystems uniqueidentifier fat32 fat


【解决方案1】:

不幸的是 FAT 没有唯一的文件 ID,当需要它们时,各种系统组件通过在内存中维护文件系统的所有文件列表来模拟它们(因此 ID 是唯一的,并且仅在系统运行时才有效) .

根据您控制的内容(您有一个文件系统驱动程序、一个过滤器或只是一个用户模式应用程序),您可能也可以这样做 - 拥有一个文件列表并根据该列表提供一些唯一 ID。

【讨论】:

  • 是的,它是一个用户模式应用程序,但我需要在会话之间保留 ID。列出内存中文件到 ID 的映射并不能解决持久性问题。
  • @HyBRiD 持久性是另一个主题。如果使用复制/删除操作移动文件,它会是同一个文件吗?如果文件被压缩然后解压缩到另一个文件夹中,它是同一个文件吗?
  • 复制/删除和压缩/解压缩在磁盘上创建一个新文件,但移动/重命名是同一个文件,所以它应该保留以前的文件 ID。
  • @HyBRiD 取决于任务,真的。在 DLP 解决方案中,复制/删除和压缩/解压缩维护受保护的信息,因此必须将结果视为同一个文件。
  • 我明白了。这种方法的问题仍然是,一旦应用程序不再运行,并且文件系统发生了一些变化,列表就会过时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 2015-10-03
  • 2010-11-15
相关资源
最近更新 更多