如何知道一个文件被打开? QT(How to know that a file was open

2019-09-23 23:35发布

我想知道,如果一个文件被用户读取(双击或打开...),我编码一个打开C++与Qt创建者在Windows应用程序,一些研究,我发现后QFileSystemWatche ,但它让我知道只有当一个变化是发生在特定的文件夹。

无效QFileSystemWatcher :: fileChanged(常量的QString&路径)[信号]当在指定的路径中的文件被修改,重命名或从磁盘中删除这个信号被发射。

如何知道如果文件被打开? 或者是有它打开或关闭时修改一个文件的方式?

任何想法请!

Answer 1:

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访问的膨胀,尤其是如果该文件是一个遥远的服务器上。 它也可能导致磁盘/ SSD的过早磨损,所以我不建议此解决方案。

  • 使用系统API

你可以得到所有突未的所有文件句柄的列表,然后检查是否包含句柄要监视的文件。 同样,你将不得不每秒做到这一点x次。 它会减慢你的电脑; 它不是在实践中(需要大量的代码依赖于特定系统API)真的很容易携带,而且可能需要提升特权工作。 我不建议太...



文章来源: How to know that a file was opened ? QT