我有一个在Linux上运行的Qt程序,但不能在Windows上运行。 它逐渐从互联网下载东西,将其写入文件,然后尝试使用QDesktopServices :: openUrl打开该文件。 这在Linux(Fedora)下工作正常,但是当我在Windows下运行时,没有任何反应 – 文件从不打开,也没有错误报告。
但是,如果我尝试在Windows上手动打开下载的文件,我find原因。 我得到的错误Another program is currently using this file
,这意味着Qt没有释放它的文件locking。 不过,我已经在它上面调用了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));
我不认为这是一个Qt问题。 在使用和不使用Qt之前,我在Windows系统上看到了类似的行为,可能是CRT或者操作系统仍然没有完成文件的工作。 如果事情按预期工作,您可以尝试在操作系统中禁用磁盘写入缓存。 我必须在Windows-Embedded RT环境中执行此操作才能获得确定性行为。
顺便说一句:即使在调用QFile :: close()之后,也可以评估QFile :: error(),这样就可以完全跳过你的flush部分。