3

重複の可能性:
ファイルを読み取り専用で開く

私のアプリケーションでは、Debug.WriteLine() を使用して Log.txt にいくつかの情報を書き込んでおり、Log.txt の内容を表示するフォームを提供したいと考えています。

しかし、ファイル Log.txt を開こうとすると、例外が発生します。

別のプロセスで使用されているため、プロセスはファイル 'F:\Rajeev\10-11-2012\Temp\Temp\bin\Debug\Log.txt' にアクセスできません。

この問題を解決するにはどうすればよいですか?

ここで別の問題は、メモ帳を使用して同じファイルを開くことができることです。では、アプリケーションを使用して同じファイルを開くことができないのはなぜですか?

以下は、ログ ファイルを指定するために使用しているコードです。

TextWriterTraceListener tr = new TextWriterTraceListener(System.IO.File.CreateText("Log.txt"));
Debug.Listeners.Add(tr);
Debug.AutoFlush = true;

以下は、ログファイルへの書き込みに使用しているコードです。

Debug.WriteLine("ERROR: Invalid Username " + s);

以下は、ログ ファイル (「デバッグ」によって既に開かれている) を開いてログ ビューアー (アプリケーションの「フォーム」) に表示するために使用しているコードです。

File.Open(LogFilePath, FileMode.Open, FileAccess.Read,FileShare.Read);
4

1 に答える 1

3

これは、ファイルを開くためのアクセス許可によって決まります。プログラムが任意のタイプの排他モードでファイルを開くと、他のプログラムはアクセスが制限されるか、まったくアクセスできなくなります。

したがって、ファイルを排他的に開こうとしないようにすることができます(コードを表示しませんでした)。ただし、他のプログラムのソースコードがない場合は、そのプログラムがファイルを排他的に開かないことを期待できます。そうでなければ、他のプログラムを終了する以外にあなたがそれについて何ができるかわかりません。

編集

次のコード:

File.Open(LogFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);

他のファイルも開いているファイルを読み取ることができると言いますが、書き込むことはできないと思います。したがって、他のプログラムがファイルに書き込んでいる場合、それは許可されません。代わりに試すこともできFileShare.ReadWriteますが、他のプログラムのソースがあるかどうかを示した場所がまだわかりません。私はそれを逃しましたか?

于 2012-11-30T15:17:34.267 に答える