15

使用言語:C#

FileOptions.DeleteOnClose理論:一時フォルダにフラグ付きのファイルを作成したい。ファイルが正常に作成され、datoを書き込みます。次のステップは、ファイルに関連付けられたアプリケーションを起動しProcess.Start(...)、ユーザーがドキュメントを検査できるようにすることです。最後にハンドルを閉じ、他のプロセスが一時ファイルのハンドルを閉じるとすぐにファイル、ファイルはオペレーティングシステムによって削除されます。

私の問題はFileShare.ReadWrite | FileShare.Delete、共有モードに追加しても、他のプロセスが読み取りのためであってもファイルを開くことができないことです。

助言がありますか?

4

3 に答える 3

0

これをチェックして:

すべてのプロセスが FileShare.ReadWrite と FileShare.Delete を使用してファイルを開いていることを確認する必要があります。

作成者が share-readwrite で開いたとしても、2 番目のプログラムが share-read で開こうとすると、2 番目のプログラムは基本的に他の誰も書き込みできないと言っています。しかし、最初のプログラムはすでにその力を持っているので、2 番目のオープンは失敗します。

于 2009-02-13T14:34:01.083 に答える
-7

Linux scnrに切り替える

これは Windows オペレーティング システムの欠陥であり、実際には回避することはできません。ファイルを開く各プログラムは、同時にファイルを開く他のプログラムに同意する必要があります。これは、私がまだ Windows を使用していた何年も前に発生した問題でした。ファイルを開いて、「他の人にもこれを開かせてください」と言うだけでは十分ではありません。他の人も、既に開いている場合でも、このファイルを開くと言う必要があります。

一方、Linux では、オペレーティング システムは、Windows のようにファイルをロックすることをまったく許可していません。ここで、ファイルが複数のプログラムによって同時に使用されている場合、プログラム自体が同時アクセスがロックアウトされることを確認する必要があります。さらに、Linux では、ファイルを作成し、他のプロセスが開始されてファイルが開かれていることを確認してから、(開いている間に) ファイルを削除することができます。ファイル名はすぐにファイル システムから削除されますが、最後のリンク (開いているファイル ハンドルを含む) が削除されるまで、ファイルはファイル システム ドライバーによって保持されます。

問題に戻る: Windows ではこれらすべてが機能しないため、他の 2 つの方法を実行できます。

  1. 次回の起動時に削除するファイルを登録します (Win3x の時代には、win.ini にそのためのセクションがありました。新しい Windows バージョンはまだそれをサポートしていますが、今ではどのように行われているか思い出せません)。
  2. 他のプロセスを開始し、ファイルを開くのを待ち、ファイルを閉じてから、削除が成功するまで毎分ファイルの削除を試みます...

よろしく、ボードー

于 2009-02-13T14:25:28.173 に答える