QIODevice
中QFile
个重新实现的open()
方法之一有QFileDevice::FileHandleFlag
个参数。看一下它的文档,有两个选项与矛盾的描述。
来自QFileDevice
documentation:
QFileDevice::AutoCloseHandle
- 传递给open()的文件句柄应该由close()关闭,默认行为是关闭只刷新文件,应用程序负责关闭文件句柄。按名称打开文件时,将忽略此标志,因为Qt始终拥有文件句柄并且必须将其关闭。
QFileDevice::DontCloseHandle
- 如果未明确关闭,则在销毁QFile对象时,基础文件句柄将保持打开状态。
Qt自动关闭文件也是如此,设置此选项实际上是否会改变任何内容?
答案 0 :(得分:6)
在查找Qt源代码后,我发现最终使用该标志的QFSFileEngine.cpp:378 * 中的行。
QFile::open()
可以传递一个现有的(stdio.h
)FILE
处理程序,该处理程序不是由Qt创建的,不应该由Qt自动关闭。相反,Qt打开的文件会被Qt自动关闭。
QFileDevice::FileHandleFlag
标志用于前一种情况,并允许程序员指定QFile
是否应该自动关闭文件而忽略它没有被Qt打开的事实。
* 如果行号不匹配,请搜索closeFileHandle
。