我想知道,如果一个文件被用户读取(双击或打开...),我编码一个打开C++
与Qt创建者在Windows应用程序,一些研究,我发现后QFileSystemWatche ,但它让我知道只有当一个变化是发生在特定的文件夹。
无效QFileSystemWatcher :: fileChanged(常量的QString&路径)[信号]当在指定的路径中的文件被修改,重命名或从磁盘中删除这个信号被发射。
如何知道如果文件被打开? 或者是有它打开或关闭时修改一个文件的方式?
任何想法请!
我想知道,如果一个文件被用户读取(双击或打开...),我编码一个打开C++
与Qt创建者在Windows应用程序,一些研究,我发现后QFileSystemWatche ,但它让我知道只有当一个变化是发生在特定的文件夹。
无效QFileSystemWatcher :: fileChanged(常量的QString&路径)[信号]当在指定的路径中的文件被修改,重命名或从磁盘中删除这个信号被发射。
如何知道如果文件被打开? 或者是有它打开或关闭时修改一个文件的方式?
任何想法请!
2个解决方案:
你可以做下面的函数(伪):
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的过早磨损,所以我不建议此解决方案。
你可以得到所有突未的所有文件句柄的列表,然后检查是否包含句柄要监视的文件。 同样,你将不得不每秒做到这一点x次。 它会减慢你的电脑; 它不是在实践中(需要大量的代码依赖于特定系统API)真的很容易携带,而且可能需要提升特权工作。 我不建议太...