2016-07-02 18 views
5

QIODeviceのうちの1つがにopen()のメソッドを再実装したものがQFileDevice::FileHandleFlag引数を持っています。それに関するドキュメントを見て、矛盾する記述を持つ2つのオプションがあります。 QFileDevicedocumentationからQtは自動的にファイルを閉じますか?

  • QFileDevice::AutoCloseHandle - (オープンに渡されたファイルハンドル)が(近いことで閉じられなければならない)、デフォルトの動作では、近くには、単にファイルをフラッシュし、アプリケーションがあるということですファイルハンドルを閉じる責任があります。名前でファイルを開くときは、Qtは常にファイルハンドルを所有しているため、このフラグは無視されます。

  • QFileDevice::DontCloseHandle - 明示的に閉じていない場合、QFileオブジェクトが破棄されると、元のファイルハンドルが開いたままになります。

だから、実際には何も変更するQtの自動クローズファイルはないかと、このオプションを設定するのですか?

+3

DontCloseHandleは、アプリケーションが以前に開いた*ハンドルとQtピギーバックを提供するときのものです。この場合、アプリケーション(Qtではなく)は生涯の所有権を保持したいかもしれません。これを "と比較する*名前でファイルを開くとき*、このフラグは無視されます。* Qtは常にファイルハンドル*を所有しており、閉じなければなりません。 – user2864740

答えて

5

Qtソースを検索した結果、最終的にフラグを使用するQFSFileEngine.cpp:378*という行が見つかりました。

QFile::open()はQtので作成されていないと自動的にQtので閉鎖されるべきではない既存の(stdio.hFILEハンドラを渡すことができます。対照的に、Qtによって開かれたファイルはQtによって自動的に閉じられます。

QFileDevice::FileHandleFlagフラグは前者の場合のフラグで、QFileがファイルを自動クローズするかどうかを指定することができます。これは、Qtによって開かれなかったという事実を無視します。 closeFileHandle用*検索


行番号が一致しない場合。

関連する問題