正在释放Qt中的文件锁定
Releasing file lock in Qt
我有一个Qt程序,它可以在Linux上运行,但不能在Windows上运行。它逐渐从互联网上下载一些东西,将其写入文件,然后尝试使用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));
我不认为这是Qt问题。我以前在Windows系统上看到过类似的行为(有和没有Qt),可能是CRT或操作系统还没有完成对文件的处理。您可能会尝试在操作系统中禁用磁盘写缓存,看看是否如预期那样工作。我必须在Windows嵌入式RT环境中这样做才能获得确定性行为。
BTW:即使在调用QFile::close()之后,您也可以评估QFile::error(),这样您就可以完全跳过flush部分。
相关文章:
- 从对象文件(.o)在macos上制作归档文件(.a文件)
- 有没有办法读取C++中的文件文件夹?
- 错误C1083:无法打开包含文件.文件正确包含在代码中
- NDK 无法看到头文件 .h 文件
- 文件文件夹关联或归属
- 如何以阻止的方式删除文件/文件夹
- 在MFC中序列化为Unicode文本文件-文件头错误
- (Qt C++)如何从QTableView将所选文件/文件夹打印到文本文件中
- 获取带有POCO的服务可执行文件文件夹
- 如何从文件文件夹创建自定义文件类型
- 如何在windows7有限内存的电脑上读取大文件?文件大小为25GB,但RAM容量只有16GB
- c++以二进制方式读取文件.文件结束的问题
- 如何在linux的makefile中使用头文件(.h)文件中定义的宏定义
- 写文件/读文件死锁
- 如何从文件夹中读取文件?文件夹包含不同类型的文件名
- 如何查找指向文件/文件夹的所有硬链接和符号链接(Windows和UNIX)
- 生成临时文件/文件夹 c++ GTEST
- 更改应用程序文件(. c文件)的名称
- 使用vc++2010从usb读取文件/文件夹
- 为特定的文件/文件夹禁用-Wall标志