-1

変更されたファイル(サイズなど)をチェックするfilesystemwatcherを備えたWindowsサービスがすでにあります。ログファイルが1MBに達すると、別のフォルダにコピーされ、元のログファイルがクリアされます。

Windowsサービスが実行していることをシミュレートするボタンを持つWindowsフォームプロジェクトを作成しました。複数のテキストファイルのサイズをチェックするforloopを作成してみました。1 MBを超える3つのログファイルを作成し、プロジェクトを実行しました。「デバイスの準備ができていません」というエラーが表示されました。これはStreamWriterにあります。すべてのファイルの読み取りとバックアップが同時に行われていると思います。

すべてをまとめると、すべてのファイルを同時にバックアップしないようにするにはどうすればよいですか?プロセスについて読みましたが、実行可能ファイル専用だと思いますよね?

4

1 に答える 1

0

この方法を試しましたか:

    if(!File.Exists(filename)) //No File? Create
{
    fs = File.Create(filename);
    fs.Close();
}
if(File.ReadAllBytes().Lenght >= 100*1024*1024) // (100mB) File to big? Create new
{
    string filenamebase = "myLogFile"; //Insert the base form of the log file, the same as the 1st filename without .log at the end
    if(filename.contains("-")) //Check if older log contained -x
    {
         int lognumber = Int32.Parse(filename.substring(filename.lastIndexOf("-")+1, filename.Length-4); //Get old number, Can cause exception if the last digits aren't numbers
         lognumber++; //Increment lognumber by 1
         filename = filenamebase + "-" + lognumber + ".log"; //Override filename
    }
    else 
    {
         filename = filenamebase + "-1.log"; //Override filename
    }
    fs = File.Create(filename);
    fs.Close();
}
于 2012-08-21T17:46:28.173 に答える