C ++ / Qt:跟踪文件系统的变化

时间:2013-08-21 09:35:17

标签: c++ qt filesystems

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

当程序处于活动状态时,当某些东西被处理时,我可以读取文件夹的更改(例如,更改文件夹或文件的名称)。但是,当程序没有运行时,我无法跟踪目录的更改。在启动时我会得到

Removed folder X
Added folder Y

而不是

Renamed folder X to Y

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

3 个答案:

答案 0 :(得分:1)

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

  

QFileSystemWatcher类提供监视接口   文件和目录进行修改

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

像TheDarkNight所说,你需要使用QFileSystemWatcher来避免可移植性等问题。 但是如果你想继续你的方法:
在GNU / Linux版本中,您可以使用目录的inode结构来检查它(处理符号链接问题)。 inode struct有一个索引,例如你可以在shell上得到它:

ls -id /path/to/your/folder

有一个访问inode的API。你可以谷歌inode struct linux。

在Windows园林中,您可以在结构BY_HANDLE_FILE_INFORMATION中访问句柄时获取文件ID:

  

<强> nFileIndexHigh       与文件关联的唯一标识符的高阶部分。       有关更多信息,请参阅nFileIndexLow。       的 nFileIndexLow       与文件关联的唯一标识符的低位部分。