如何知道文件已打开?.QT



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

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

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

请问有什么想法吗!!

2 种

解决方案:

  • 使用Qt

您可以创建以下函数(伪代码):

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

然后你每秒调用它一次,并在is_open(t-1) == false && is_open(t) == true时发出信号fileOpened(const QString& file),其中t是时间。

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

  • 使用系统接口

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

最新更新