2

別のプロセスで使用されているファイルに書き込む方法はありますか?ログを作成し、サービスが停止するまでファイルをロックするWindowsサービスがあります。テキストファイルの内容をバックアップし、元のファイルをクリアする別のプログラムがあります。C#プログラムをバックアップして、他のサービスが使用しているログをクリアしようとすると、「別のプロセスによって使用されているため、プロセスはファイルにアクセスできません」というエラーが生成されました。

私は検索していて、ファイルがロックされているかどうかを確認し、別のプログラムで使用されなくなるまで待つ必要があることを知っています。ロックされたファイルへの書き込みを可能にするコードが必要です。それは可能ですか?

これは、3分ごとにファイルにログを記録する私のサンプルWindowsサービスコードです。

private Timer timer = new Timer();
private static FileStream fs = new FileStream(@"D:\Hello.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
private StreamWriter sw = new StreamWriter(fs);

protected override void OnStart(string[] args)
{
    timer.Elapsed += new ElapsedEventHandler(WriteText);
    timer.Interval = 50000; //5 minutes
    timer.Start();
}
public void WriteText(object source, ElapsedEventArgs e)
{
    sw.WriteLine(DateTime.Now);
}
protected override void OnStop()
{
    sw.Close();
    sw.Dispose();
    fs.Close();
    fs.Dispose();   
}

サービスを停止しない限り、ストリームを閉じないようにする必要があります。

4

1 に答える 1

0

StreamWriter の使用に縛られていますか? ロギングにlog4netなどを使用することを検討することをお勧めします。ログをロールオーバーするように構成でき、そこからバックアップするか、単にバックアップとして使用できます。

于 2012-08-24T01:33:38.853 に答える