私は、Windowsでファイルを読み込んで、OSレベルのロックを避けて、アプリケーションがファイルを読み込んでいる間でもファイルを削除できるようにする必要があります。ある "ファイルの終わり" までWindowsでハンドルを閉じた後でもファイルを読む方法は?
- のCreateFile
- のReadFile(複数回:C++、Pythonの、Java(登録商標)などを介して、典型的な読み出し動作を使用は
procmonを介して評価呼び出すときWINAPIの同じ予想されるシーケンスを明らかにする
CLOSEFILE)
しかし、私はDropboxのは、サーバーにアップロードするファイルを読み込むとき、シーケンスがあることに気づい:
- のCreateFile
- CLOSEFILE
- のReadFile
- を繰り返して、1-3
ReadFileはCloseFileの後に呼び出されるため、Dropboxがファイルを読み込んでいる間でもファイルを削除できます。
CloseFileが呼び出された後、WinapiがReadFileをどのように許可するのか分かりません。
Dropboxの動作を示すProcmonのスクリーンショットを添付しました。
これはどのように行われたのですか?
CreateFileを複数回呼び出しても有効ですが、カウントするだけです。 CloseHandleでCreateFileをカウントダウンします。読み込み直後のCloseHandleは、最後のハンドルを本当に破棄し、スクリーンショットの最初のCreateFileとペアを作成したものです。だからあなたの前提は妥当ではない。 –
:(あなたが正しいです...私は愚かだと思います。ありがとう@HansPassant :) – dejuknow
oplockが壊れているときに通知するために、ファイルにoplock(oplock)を使用してFSCTL_REQUEST_OPLOCKを使用することができます。 - https://msdn.microsoft.com/en-us/library/windows/desktop/aa365433(v=vs.85).aspx – RbMm