我正在编写一个C ++应用程序,它将监视磁盘上是否存在某些文件。我已经探索了ReadDirectoryChanges和FindFirstFile / FindNextFile函数以及一个简单的轮询解决方案。我的问题是,如果父目录的名称更改或文件被重命名,我无法分辨。我不想查看文件的父目录以进行名称更改。有没有办法在没有使用目录的情况下判断磁盘上是否存在文件?我被告知这可以使用操作系统本身的内存地址,但我没有找到任何东西。也许我只是不知道我在找什么?任何帮助将不胜感激。
答案 0 :(得分:4)
您可以使用OpenFileById() function打开由文件ID或GUID标识的已知文件。
另请参阅Raymond Chen博客上的"If you want to use GUIDs to identify your files, then nobody's stopping you"。
答案 1 :(得分:2)
Change Journals可能就是你要找的东西:
自动备份应用程序是程序的一个示例,该程序必须检查卷状态的更改以执行其任务。检查目录或文件更改的强力方法是扫描整个卷。但是,这通常不是一种可接受的方法,因为它会导致系统性能下降。另一种方法是应用程序为要备份的目录注册目录通知(通过调用FindFirstChangeNotification或ReadDirectoryChangesW函数)。这比第一种方法更有效,但是,它要求应用程序始终运行。此外,如果必须备份大量目录和文件,则此类应用程序的处理量和内存开销也可能导致操作系统性能下降。
为了避免这些缺点,NTFS文件系统维护更新序列号(USN)更改日志。 如果对卷中的文件或目录进行任何更改,则会更新该卷的USN更改日志,其中包含更改说明以及文件或目录的名称。
因此,您可以监视卷的更改日志记录以获取文件创建,文件名更改,文件移动,文件写入等,并且您将知道它们适用的确切文件。