如何在不使用目录的情况下在磁盘上查找文件

How to find file on disk without use of directories

本文关键字:磁盘 情况下 查找 文件      更新时间:2023-10-16

我正在编写一个C++应用程序,它将监视以确保磁盘上存在某些文件。我已经探索了ReadDirectoryChanges和FindFirstFile/FindNextFile函数,以及一个简单的轮询解决方案。我的问题是,如果父目录的名称更改或文件被重命名,我无法判断。我不想查看文件的父目录是否有名称更改。有没有一种方法可以在不使用目录的情况下判断磁盘上是否存在文件?有人告诉我,使用操作系统本身的内存地址是可能的,但我什么都没找到。也许我只是不知道我在找什么?如有任何帮助,我们将不胜感激。

您可以使用OpenFileById()函数打开一个已知文件,该文件由文件ID或GUID标识。

另请参阅Raymond Chen博客上的"如果你想使用GUID来识别你的文件,那么没有人会阻止你"。

更改日志可能是您想要的:

自动备份应用程序是程序的一个示例,该程序必须检查卷状态的更改才能执行其任务。检查目录或文件更改的暴力方法是扫描整个卷。然而,这通常不是一种可接受的方法,因为它会导致系统性能下降。另一种方法是应用程序为要备份的目录注册目录通知(通过调用FindFirstChangeNotification或ReadDirectoryChangesW函数)。这比第一种方法更有效,但它要求应用程序始终在运行。此外,如果必须备份大量目录和文件,则此类应用程序的处理量和内存开销也可能导致操作系统的性能下降。

为了避免这些缺点,NTFS文件系统维护一个更新序列号(USN)更改日志当对卷中的文件或目录进行任何更改时,该卷的USN更改日志将使用更改描述和文件或目录的名称进行更新

因此,您可以监控卷的更改日志记录,以了解文件创建、文件名更改、文件移动、文件写入等,并且您将知道它们应用于的确切文件。