C#/.NET を使用して、Windows 7 ホストで追加用にファイルを開きたいです。この目的のために、通常のファイル出力操作を使用したいと考えています。私はそのような解決策を見つけました:
FileStream trace_fd = new FileStream(r"c:\temp\testlog.txt",
FileMode.Append,
FileAccess.Write,
FileShare.ReadWrite)
上記の行のプログラムが稼働している場合でも、トレースファイルを読み取ることができます。次のような適切なコードから、ファイルが別のプロセスによって使用されているという例外はありません。
FileStream good_logreader_fd = new FileStream("c:\temp\testlog.txt",
FileMode.Read,
FileAccess.Read,
FileShare.ReadWrite)
次に、次のような行を持つ別のプログラム (バグのあるログ スキャナー) があります。
FileStream bad_logreader_fd = new FileStream("c:\temp\testlog.txt",
FileMode.Read,
FileAccess.Read,
FileShare.None)
このような行は、明らかにログ スキャナーのバグです。私のプログラムが実行されていない場合、バグのあるlogscanerが排他ロックを取得し、プログラムのその後の実行はトレースファイルのfdを取得できません.
私の質問は、そのような恐ろしいシナリオが起こらないようにするにはどうすればよいかということです. たとえば、トレースファイルのファイル許可を設定して、誰かが排他ロックを取得できないようにすることはできますか? はいの場合、どのように?私のプログラムをバグのあるログスキャナーの問題から保護できるものは他にありますか? プログラムの実行間で同じトレース ファイル名を保持する必要があることに注意してください。