Qt会自动关闭文件吗?

Ita*_*dev 5 c++ qt qfile

其中一个QIODevice重新实现的open()方法QFile有一个QFileDevice::FileHandleFlag参数.看一下它的文档,有两个选项与矛盾的描述.

QFileDevice 文档:

  • QFileDevice::AutoCloseHandle - 传递给open()的文件句柄应该由close()关闭,默认行为是关闭只刷新文件,应用程序负责关闭文件句柄.按名称打开文件时,将忽略此标志,因为Qt始终拥有文件句柄并且必须将其关闭.

  • QFileDevice::DontCloseHandle - 如果未显式关闭,则在销毁QFile对象时,基础文件句柄保持打开状态.

Qt自动关闭文件也是如此,设置此选项实际上是否会改变任何内容?

Ita*_*dev 6

在查找Qt源代码后,我在QFSFileEngine.cpp:378 *中找到了最终使用该标志的行.

QFile::open()可以传递一个不是由Qt创建的现有(stdio.h)FILE处理程序,不应该被Qt自动关闭.相反,Qt打开的文件会自动被Qt关闭.

QFileDevice::FileHandleFlag标志用于前一种情况,并允许程序员指定是否QFile应该自动关闭文件而忽略它没有被Qt打开的事实.


*搜索closeFileHandle行号是否不匹配.