【发布时间】:2016-07-02 20:20:22
【问题描述】:
QIODevice 中的一个QIODevice 重新实现了open() 方法@ 有一个QFileDevice::FileHandleFlag 参数。查看它的文档,有两个描述相互矛盾的选项。
来自QFileDevicedocumentation:
QFileDevice::AutoCloseHandle– 传递给 open() 的文件句柄应该由 close() 关闭,默认行为是 close 只是刷新文件,应用程序负责关闭文件句柄。当按名称打开文件时,此标志将被忽略,因为 Qt 始终拥有文件句柄并且必须关闭它。
QFileDevice::DontCloseHandle– 如果没有显式关闭,当 QFile 对象被销毁时,底层文件句柄保持打开状态。
那么 Qt 是否自动关闭文件,设置这个选项是否真的改变了什么?
【问题讨论】:
-
DontCloseHandle 用于当应用程序提供一个先前打开的句柄并在其上搭载 Qt 时。在这种情况下,应用程序(不是 Qt)可能希望保留终身所有权。将此与“按名称打开文件时,此标志将被忽略,因为Qt 始终拥有文件句柄,并且必须关闭它。”