在Windows中修改文件夹时通知我的应用程序?

时间:2015-01-24 14:50:00

标签: c++ windows qt directory

我希望我的应用程序创建的文件夹的所有权仅保留在我的应用程序中。 这是因为我将应用程序的数据链接到文件夹路径。 所以这两种解决方案中的任何一种都适合我:

  1. 不允许任何人修改我的应用程序创建的文件夹。 只有我的应用程序可以删除/重命名该文件夹。修改它 通过Windows资源管理器应该要求管理员权限。
  2. 如果无法解决上述问题,至少应将我的应用程序通知更改,以便更新我的应用程序链接。
  3. 问题是,是否可以在Windows中执行此操作? 我觉得语言没有发挥作用,但如果需要,我仍然使用Qt在C ++中开发我的应用程序。

    编辑:现在有2个案例被通知:

    一个。当我的应用程序运行并且文件夹被修改时。

    湾当我的应用程序未运行且文件夹被修改时(如果Windows维护日志文件以更改文件夹,则可以实现此目的。我的应用程序可以读取此日志文件并了解文件夹中的更改)。

    实际上,我的意思是专门针对案例b,但现在阅读答案让我觉得可能无法收到案例b的通知。

3 个答案:

答案 0 :(得分:3)

Windows中的安全性是基于帐户的,而不是基于应用程序的。文件夹不是由您的应用程序创建的#34 ;;它是由运行您的应用程序的用户创建的。

至于被通知,只需保持一个开放的句柄。这将阻止在您运行时更改文件夹。显然,当您没有投放时,您甚至无法收到通知。

[编辑] 当您的应用未运行时,您需要NTFS change journals

答案 1 :(得分:2)

您可以使用QFileSystemWatcher类来监视文件和目录以进行修改。

QFileSystemWatcher *watcher = new QFileSystemWatcher();
watcher->addPath(QStringLiteral("C:\\Folder"));
QObject::connect(watcher,&QFileSystemWatcher::directoryChanged,[](QString folder) {
    qDebug() << folder;
});

答案 2 :(得分:1)

您可以随时通知dirctory更改 - 它有一个特定的API:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365465%28v=vs.85%29.aspx

在自己的线程中运行此类监控调用以减少丢失通知突发的可能性以及处理该通知的方式,以及随后对其他线程的缓冲/信令,是常见的对于SO来说有点宽泛。

似乎支持异步重叠操作,但我没有尝试过/测试它。