Qt 会自动关闭文件吗?
Posted
技术标签:
【中文标题】Qt 会自动关闭文件吗?【英文标题】:Does Qt auto close files? 【发布时间】:2016-07-02 20:20:22 【问题描述】:QIODevice
中的一个QIODevice
重新实现了open()
方法@ 有一个QFileDevice::FileHandleFlag
参数。查看它的文档,有两个描述相互矛盾的选项。
来自QFileDevice
documentation:
QFileDevice::AutoCloseHandle
– 传递给 open() 的文件句柄应该由 close() 关闭,默认行为是 close 只是刷新文件,应用程序负责关闭文件句柄。当按名称打开文件时,此标志将被忽略,因为 Qt 始终拥有文件句柄并且必须关闭它。
QFileDevice::DontCloseHandle
– 如果没有显式关闭,当 QFile 对象被销毁时,底层文件句柄保持打开状态。
那么 Qt 是否自动关闭文件,设置这个选项是否真的改变了什么?
【问题讨论】:
DontCloseHandle 用于当应用程序提供一个先前打开的句柄并在其上搭载 Qt 时。在这种情况下,应用程序(不是 Qt)可能希望保留终身所有权。将此与“按名称打开文件时,此标志将被忽略,因为Qt 始终拥有文件句柄,并且必须关闭它。” 【参考方案1】:在查找 Qt 源代码后,我在 QFSFileEngine.cpp:378* 中找到了最终使用该标志的行。
QFile::open()
可以传递一个现有的 (stdio.h
) FILE
处理程序,该处理程序不是由 Qt 创建的,并且不应由 Qt 自动关闭。相比之下,Qt 打开的文件会被 Qt 自动关闭。
QFileDevice::FileHandleFlag
标志用于前一种情况,允许程序员指定 QFile
是否应该自动关闭文件,而忽略它不是由 Qt 打开的事实。
*如果行号不匹配,请搜索closeFileHandle
。
【讨论】:
以上是关于Qt 会自动关闭文件吗?的主要内容,如果未能解决你的问题,请参考以下文章
java 的输入输出流 如果在程序中没有close掉 那么关闭程序之后 流会自动关闭吗?
这个 try-catch-with-resourcers 会自动关闭吗? [复制]