如何清空同一程序正在使用的日志文件的内容

时间:2014-11-15 09:28:05

标签: c# file file-io log4net ilog

我有一个C#应用程序,它使用log4net在驻留在应用程序目录中的文件名“logfile.txt”中写入一些日志输出。我想在文件大小达到10GB时立即清空文件的内容。

为此,我正在使用一个计时器,它会一直检查文件的大小是否超过10GB。 但是我无法对“logfile.txt”执行任何操作,因为其他线程正在使用它来写日志输出而它正在抛弃我,

  

System.IO.IOException“进程无法访问文件'C:\ Program Files \ MyApps \ TestApp1 \ logfile.txt',因为它正由另一个进程使用。”

以下是检查文件“logfile.txt”

大小的计时器代码
private void timer_file_size_check_Tick(object sender, EventArgs e)
{
    try
    {
        string log_file_path = "C:\\Program Files\\MyApps\\TestApp1\\logfile.txt";
        FileInfo f = new FileInfo(log_file_path);
        bool ex;
        long s1;
        if (ex = f.Exists)
        {
            s1 = f.Length;
            if (s1 > 10737418240)
            {
                System.GC.Collect();
                System.GC.WaitForPendingFinalizers();

                File.Delete(log_file_path);
                //File.Create(log_file_path).Close();
                //File.Delete(log_file_path);
                //var fs = new FileStream(log_file_path, FileMode.Truncate);
            }
        }
        else
        {
            MDIParent.log.Error("Log file doesn't exists..");
        }
    }
   catch (Exception er)
    {
        MDIParent.log.Error("Exceptipon :: " + er.ToString());
    } 
}

1 个答案:

答案 0 :(得分:1)

您不应该自己删除日志文件,因为log4net可以为您完成。如果使用RollingFileAppender,则可以指定最大文件大小(maximumFileSize属性)。此外,如果将maxSizeRollBackups属性设置为0,则日志文件在达到限制时将被截断。请查看此question以获取示例。