如何在不接触该目录中的文件的情况下查找文件夹更改(使用 Windows 和 C++)

Posted

技术标签:

【中文标题】如何在不接触该目录中的文件的情况下查找文件夹更改(使用 Windows 和 C++)【英文标题】:How to find folder changes without touching the files in that directory (Using Windows and C++) 【发布时间】:2014-07-31 08:54:58 【问题描述】:

好吧,我对此感到困惑,我有几个问题:

    如何在不接触文件的情况下检查文件夹是否已被修改? “上次修改时间”会在创建/删除文件、创建/删除子文件夹时发生变化,但不会在文件被修改时发生变化(例如,当文件大小发生变化时)。

    如果文件大小发生变化,则文件夹大小也会发生变化,但没有 API 可以在不接触文件的情况下在 Windows 中查找文件夹大小。 假设我给每个文件夹一些值,现在当它的大小改变时,默认值会改变吗? (一个预期的例子可能是它的哈希值?) 或者当文件夹被修改时,Windows 中默认会发生什么变化? (除了它的大小。)

提前致谢。

【问题讨论】:

我不知道你真正在问什么,但你可能想看看“在 Windows 中更改日记”。这很复杂,但这是检测文件系统变化的唯一 100% 可靠的方法。microsoft.com/msj/1099/journal2/journal2.aspx 和microsoft.com/msj/0999/journal/journal.aspx 请展示您尝试过的内容(正如您所提到的您被卡住了),以便我们进行故障排除。除此之外,限制是相当随意的,对我来说似乎不是一个好问题。 我正在开发一个扫描目录并返回目录统计信息的应用程序...首先我扫描整个目录并将信息存储到数据库中..对于后续扫描我只想扫描已更改的文件夹.. 我想使用 dB 中剩余文件夹的信息... @user3781814:你真的,真的需要改变日志。您可能会发现您不需要数据库(因为它已经存在)而且它们非常快(比扫描文件夹和文件快得多)。 【参考方案1】:

如果你想监控文件夹的变化,你可以使用 api ReadDirectoryChangesW。但是,如果您想离线检查,则需要扫描整个目录并检查每个文件的修改日期、文件夹创建日期等。将其与上次扫描时间进行比较。

您可以在发现至少一项更改时停止扫描,以节省扫描时间。

如果您的应用具有管理员权限,那么您可以在reading the NTFS change journal 的文件夹中找到更改。

【讨论】:

@user3781814 然后请更清楚地说明您需要什么,否则您的问题会变得固执己见。 好吧,我不想连续监控..而且我不应该单独访问文件..只是在扫描时访问文件夹,应该能够找到已更改的文件夹..

以上是关于如何在不接触该目录中的文件的情况下查找文件夹更改(使用 Windows 和 C++)的主要内容,如果未能解决你的问题,请参考以下文章

如何在不下载文件的情况下查找放置在谷歌云存储中的 csv 文件中的记录数

如何在不更改页面的情况下上传文件

如何在不添加目录层次结构的情况下使用 Python 将文件添加到 tarfile?

如何在不编译更改的文件的情况下运行`iex -S mix`?

在 R 中读取文件而不更改工作目录

如何在不更改web.config文件中的URL的情况下重定向域?