如何在不使用目录的情况下在磁盘上查找文件
How to find file on disk without use of directories
我正在编写一个C++应用程序,它将监视以确保磁盘上存在某些文件。我已经探索了ReadDirectoryChanges和FindFirstFile/FindNextFile函数,以及一个简单的轮询解决方案。我的问题是,如果父目录的名称更改或文件被重命名,我无法判断。我不想查看文件的父目录是否有名称更改。有没有一种方法可以在不使用目录的情况下判断磁盘上是否存在文件?有人告诉我,使用操作系统本身的内存地址是可能的,但我什么都没找到。也许我只是不知道我在找什么?如有任何帮助,我们将不胜感激。
您可以使用OpenFileById()函数打开一个已知文件,该文件由文件ID或GUID标识。
另请参阅Raymond Chen博客上的"如果你想使用GUID来识别你的文件,那么没有人会阻止你"。
更改日志可能是您想要的:
自动备份应用程序是程序的一个示例,该程序必须检查卷状态的更改才能执行其任务。检查目录或文件更改的暴力方法是扫描整个卷。然而,这通常不是一种可接受的方法,因为它会导致系统性能下降。另一种方法是应用程序为要备份的目录注册目录通知(通过调用FindFirstChangeNotification或ReadDirectoryChangesW函数)。这比第一种方法更有效,但它要求应用程序始终在运行。此外,如果必须备份大量目录和文件,则此类应用程序的处理量和内存开销也可能导致操作系统的性能下降。
为了避免这些缺点,NTFS文件系统维护一个更新序列号(USN)更改日志当对卷中的文件或目录进行任何更改时,该卷的USN更改日志将使用更改描述和文件或目录的名称进行更新
因此,您可以监控卷的更改日志记录,以了解文件创建、文件名更改、文件移动、文件写入等,并且您将知道它们应用于的确切文件。
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在C++中如何在没有pow的情况下进行基础计算
- fwrite() 与 write() 在存在磁盘缓存的情况下
- 如何在不使用目录的情况下在磁盘上查找文件
- 在不损坏文件系统的情况下将原始数据"signature"写入磁盘
- C++如何在不使用winapi的情况下将文件从一个磁盘移动并复制到不同的磁盘