0

我目前正在尝试实现一个 c++ 程序来监视文件系统上的文件夹。在初始化应用程序时,它会扫描目录并保存一些关于它的元信息。

当程序处于活动状态时发生某些事情时,我可以读取文件夹的更改(例如更改文件夹或文件的名称)。但是,当程序未运行时,我无法跟踪对目录的更改。启动时我会得到

Removed folder X
Added folder Y

代替

Renamed folder X to Y

是否可以以不同于路径/名称的其他方式识别目录?如果是,我将如何在 C++/Qt 中收集这些信息?

4

3 回答 3

1

而不是重新发明轮子,您可以只使用 Qt 文档所述的 QFileSystemWatcher 类:-

QFileSystemWatcher 类提供了一个接口,用于监视文件和目录的修改

如果您希望程序一直运行,那么您可能需要考虑创建服务(在 Windows 中)或守护程序(Linux / OSX)。

于 2013-08-21T09:53:42.190 回答
0

这是特定于文件系统的,但通常是的,这是可能的。我认为 FAT 是主要的例外。但是您不会在 C++ 标准库或 Qt 中找到这方面的代码。这太不寻常了,因此如果不是特定于文件系统的代码,您将需要特定于操作系统的代码。

于 2013-08-21T11:02:30.930 回答
0

就像 TheDarkNight 说的,你需要使用 QFileSystemWatcher 来避免可移植性等问题。但是如果您想继续您的方法:
在 GNU/Linux 领域,您可以使用目录的 inode 结构来检查这一点(注意符号链接问题)。inode 结构有一个索引,例如,您可以通过以下方式在 shell 上获取它:

ls -id /path/to/your/folder

有一个API可以访问inode。你可以用谷歌搜索 inode struct linux。

在 Windows Garden 中,您可以在访问 struct BY_HANDLE_FILE_INFORMATION中的句柄时获取文件 ID :

nFileIndexHigh 与文件关联的唯一标识符的高位部分。有关详细信息,请参阅 nFileIndexLow。 nFileIndexLow 与文件关联的唯一标识符的低位部分。

于 2017-06-08T12:39:17.390 回答