Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用目录的情况下查找磁盘上的文件 我正在编写一个C++应用程序,它将确保磁盘上的某些文件存在。我研究了ReadDirectoryChanges和FindFirstFile/FindNext文件函数以及一个简单的轮询解决方案。我的问题是,如果父目录的名称更改或文件被重命名,我就说不出来了。我不想查看文件的父目录的名称更改。有没有办法判断磁盘上是否存在不使用目录的文件?有人告诉我,在操作系统上使用内存地址是可能的,但我没有发现任何东西。也许我只是不知道我在找什么?如果您有任何帮助,我们将不胜感激。_C++_Windows_Winapi - Fatal编程技术网

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

如何在不使用目录的情况下查找磁盘上的文件 我正在编写一个C++应用程序,它将确保磁盘上的某些文件存在。我研究了ReadDirectoryChanges和FindFirstFile/FindNext文件函数以及一个简单的轮询解决方案。我的问题是,如果父目录的名称更改或文件被重命名,我就说不出来了。我不想查看文件的父目录的名称更改。有没有办法判断磁盘上是否存在不使用目录的文件?有人告诉我,在操作系统上使用内存地址是可能的,但我没有发现任何东西。也许我只是不知道我在找什么?如果您有任何帮助,我们将不胜感激。,c++,windows,winapi,C++,Windows,Winapi,可能就是您想要的: 自动备份应用程序是必须检查卷状态更改以执行其任务的程序的一个示例。检查目录或文件更改的暴力方法是扫描整个卷。然而,这通常是不可接受的方法,因为它会导致系统性能下降。另一种方法是应用程序通过调用要备份的目录的FindFirstChangeNotification或ReadDirectoryChangesW函数来注册目录通知。这比第一种方法更有效,但是,它要求应用程序始终运行。此外,如果必须备份大量目录和文件,则此类应用程序的处理量和内存开销也可能导致操作系统性能下降 为了避免这

可能就是您想要的:

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

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

因此,您可以监视卷的更改日志记录,以查看文件创建、文件名更改、文件移动、文件写入等情况,您将知道它们应用于哪些文件。

可能就是您要查找的:

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

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


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

您可以使用打开文件ID或GUID标识的已知文件


另请参见Raymond Chen的博客。

您可以使用打开文件ID或GUID标识的已知文件


另请参见Raymond Chen的博客。

我不想查看文件的父目录中的名称更改。可能很难。为什么目录会更改名称?别那么做。如果有必要,监控它。似乎很简单…在操作系统本身上使用直接地址?隐马尔可夫模型。。。你还在使用DOS吗?不难观察命名的变化,如果文件嵌套在很多目录中,那就太乏味了。我希望有一种方法可以在根本不使用目录的情况下检查文件是否存在。也许这是一厢情愿的想法。当我试图用面包屑样式获取文件名和目录时,遇到了同样的情况。除了你尝试过的方法,我找不到其他方法。你读过:@YePhIcK-我不确定?我使用的是Windows 7 Enterprise x64,如果这能告诉你什么的话?我不想查看文件的父目录中的名称更改。可能很难。为什么目录会更改名称?别那么做。如果有必要,监控它。似乎很简单…在操作系统本身上使用直接地址?隐马尔可夫模型。。。你还在使用DOS吗?不难观察命名的变化,如果文件嵌套在很多目录中,那就太乏味了。我希望有一种方法可以在根本不使用目录的情况下检查文件是否存在。也许是这样
但是我一厢情愿。当我试图用面包屑样式获取文件名和目录时,我遇到了同样的情况。除了你尝试过的方法,我找不到其他方法。你读过:@YePhIcK-我不确定?我使用的是Windows7EnterpriseX64,如果这告诉你什么的话?看起来也很有希望!我会进一步探讨这个问题。很抱歉花了这么长时间才谈到这个问题。正如我所希望的那样工作。谢谢。我喜欢OpenFileByID,但请记住,文件/文件夹重命名和移动不会影响文件ID、文件引用号或附加到文件的任何guid…因此文件可能仍然存在…但不是您最初放置的位置。此外,还可以删除文件,然后稍后再重新创建。文件具有新的文件ID,您分配的任何guid都将消失@克莱:一般来说,按ID打开文件的目的就是为了让你即使移动了也能找到它。如果要检查文件的当前位置,可以使用GetFinalPathNameByHandle。如果文件被删除,然后重新创建,从操作系统的角度来看,它不再是同一个文件,但是,是的,有必要知道预期操作该文件的应用程序是否可能会这样做-这一点很好。看起来也很有希望!我会进一步探讨这个问题。很抱歉花了这么长时间才谈到这个问题。正如我所希望的那样工作。谢谢。我喜欢OpenFileByID,但请记住,文件/文件夹重命名和移动不会影响文件ID、文件引用号或附加到文件的任何guid…因此文件可能仍然存在…但不是您最初放置的位置。此外,还可以删除文件,然后稍后再重新创建。文件具有新的文件ID,您分配的任何guid都将消失@克莱:一般来说,按ID打开文件的目的就是为了让你即使移动了也能找到它。如果要检查文件的当前位置,可以使用GetFinalPathNameByHandle。如果文件被删除,然后重新创建,从操作系统的角度来看,它不再是同一个文件,但是,是的,有必要知道预期操作该文件的应用程序是否可能会这样做-这一点很好。