私はロギングクラスを持っています。log.txt ファイルが存在しない場合は新しいファイルを作成し、そのファイルにメッセージを書き込みます。また、ファイル サイズと、ファイルがローカル設定に対して作成された時期を確認するために実行するメソッドもあります。log.txt の作成時刻と現在時刻の差がローカル設定の MaxLogHours 値を超える場合、log.txt はローカル アーカイブ フォルダーにアーカイブされ、削除されます。新しい log.txt ファイルは、次にログ メッセージがクラスに送信されたときに、上記のプロセスによって作成されます。
これはうまく機能しますが、log.txt ファイルの FileInfo.CreationTime を見ると、常に同じ - 2012 年 7 月 17 日 12:05/18 PM - 何をしても同じです。私は手動でファイルを削除しましたが、プログラムは常に同じようにファイルを削除します。ここで何が起こっているのですか?古いものにもタイムスタンプを付けましたが、まだ何も機能しません。ファイル名が同じなので、Windowsはファイルが同じであると考えていますか? 助けていただければ幸いです、ありがとう!
アーカイブ方法
public static void ArchiveLog(Settings s)
{
FileInfo fi = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt");
string archiveDir = AppDomain.CurrentDomain.BaseDirectory + "\\archive";
TimeSpan ts = DateTime.Now - fi.CreationTime;
if ((s.MaxLogKB != 0 && fi.Length >= s.MaxLogKB * 1000) ||
(s.MaxLogHours != 0 && ts.TotalHours >= s.MaxLogHours))
{
if (!Directory.Exists(archiveDir))
{
Directory.CreateDirectory(archiveDir);
}
string archiveFile = archiveDir + "\\log" + string.Format("{0:MMddyyhhmmss}", DateTime.Now) + ".txt";
File.Copy(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", archiveFile);
File.Delete(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt");
}
}
ログの書き込み/作成:
public static void MsgLog(string Msg, bool IsStandardMsg = true)
{
try
{
using (StreamWriter sw = new StreamWriter(Directory.GetCurrentDirectory() + "\\log.txt", true))
{
sw.WriteLine("Msg at " + DateTime.Now + " - " + Msg);
Console.Out.WriteLine(Msg);
}
}
catch (Exception ex)
{
Console.Out.WriteLine(ex.Message);
}
}