在Qt中释放文件锁定

时间:2016-01-07 07:39:11

标签: c++ windows qt qt5

我有一个适用于Linux但不适用于Windows的Qt程序。它逐步从Internet下载内容,将其写入文件,然后尝试使用QDesktopServices :: openUrl打开该文件。这在Linux(Fedora)下工作正常,但是当我在Windows下运行时,没有任何反应 - 文件永远不会打开,但也没有报告错误。

但是,如果我尝试在Windows上手动打开下载的文件,我会找到原因。我收到错误Another program is currently using this file,这意味着Qt尚未释放对该文件的锁定。但是我已经调用了file-> close()。

如何确保QFile上的所有锁定都已发布?

这是在文件写完后运行的代码片段:

QString filename = file->fileName();

if (!file->flush())
  emit error("Could not finish writing file") // Not emitted
file->close();

QDesktopServices::openUrl(QUrl::fromLocalFile(filename));

1 个答案:

答案 0 :(得分:0)

我认为这不是Qt问题。我之前在(有和没有Qt)的Windows系统上看到过类似的行为,可能是CRT或操作系统仍未完成对文件的处理。 您可能会尝试在操作系统中禁用磁盘写入缓存,以查看是否按预期工作。我必须在Windows嵌入式RT环境中执行此操作才能获得确定性行为。

BTW:你甚至可以在调用QFile :: close()之后评估QFile :: error(),这样你就可以完全跳过你的冲洗部分了。