3

我想知道用户是否打开了文件进行阅读(双击或使用...打开),我正在C++Windows 上使用 Qt Creator 编写应用程序,经过一些研究后我发现 QFileSystemWatche,但它让我知道只有更改发生在特定文件夹中。

void QFileSystemWatcher::fileChanged ( const QString & path ) [信号] 当指定路径上的文件被修改、重命名或从磁盘中删除时发出此信号。

如何知道文件是否被打开?或者有没有办法在打开或关闭文件时修改文件?

请有什么想法!!!

4

1 回答 1

0

2个解决方案:

  • 使用 Qt

您可以制作以下功能(伪代码):

function is_open(file)
    handle = open file to write
    if(handle is ok)
        close file
        return true
    else
        return false

然后你每秒调用一次,并在fileOpened(const QString& file)任何时候发出信号is_open(t-1) == false && is_open(t) == true,时间在哪里t

但是,此解决方案可能会很慢,并且可能导致一些 io-access 膨胀,尤其是当文件位于远程服务器上时。它还可能导致磁盘/SSD 过早磨损,因此我不推荐此解决方案。

  • 使用系统 API

您可以获得所有进程的所有文件句柄的列表,然后检查它是否包含要监视的文件的句柄。同样,您必须每秒执行 x 次。它会减慢你的电脑;它在实践中并不是真正可移植的(所需的代码很大程度上取决于特定于系统的 API),并且可能需要提升权限才能工作。我也不推荐...

于 2012-10-11T21:48:35.783 回答