一尘不染

Windows中的唯一文件标识符

c#

有没有办法在文件的生命周期中唯一地标识文件(可能还有目录),而不管移动,重命名和内容修改如何?(Windows
2000及更高版本)。制作文件副本应该为副本赋予其自己的唯一标识符。

我的应用程序将各种元数据与单个文件相关联。如果文件被修改,重命名或移动,则能够自动检测和更新文件关联将很有用。

FileSystemWatcher可以提供通知此类变化的事件,但是,如果许多文件系统事件迅速发生,它会使用可以轻松填充(并且丢失事件)的内存缓冲区。

哈希没有用,因为文件的内容可以更改,因此哈希也将更改。

我曾考虑过使用文件创建日期,但是在某些情况下,它不是唯一的(即,当复制多个文件时)。

我还听说过NTFS中的文件SID(安全ID?),但是我不确定这是否可以满足我的需求。

有任何想法吗?


阅读 684

收藏
2020-05-19

共1个答案

一尘不染

如果调用GetFileInformationByHandle,则会在BY_HANDLE_FILE_INFORMATION.nFileIndexHigh
/ Low中获得文件ID。该索引在卷中是唯一的,即使您移动文件(在卷中)或重命名文件,索引也保持不变。

如果可以假定使用了NTFS,则可能还需要考虑使用备用数据流来存储元数据。

2020-05-19