Qt会自动关闭文件吗?

时间:2016-07-02 20:20:23

标签: c++ qt qfile

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

来自QFileDevice documentation

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

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

  •   

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

1 个答案:

答案 0 :(得分:6)

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

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

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

* 如果行号不匹配,请搜索closeFileHandle