如何知道文件被打开了? QT

时间:2012-10-11 13:58:08

标签: c++ file qt4 signals-slots qfilesystemwatcher

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

  

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

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

请知道!!!

1 个答案:

答案 0 :(得分: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),并且可能需要提升的特权才能工作。我也不建议......