簡體   English   中英

如何多次使用logfil打開程序? (C#)

[英]How can I open a Program with a logfil multiple times? (C#)

我有以下代碼:

class Program
{
    static void Main(string[] args)
    {
        using (StreamWriter w = File.AppendText(@"C:\temp\log.txt"))
        {
            Log("Test1", w);
            Console.ReadLine();
        }
    }
    public static void Log(string logMessage, TextWriter w)
    {
        w.WriteLine(DateTime.Now.ToShortDateString() + " | " + DateTime.Now.ToLongTimeString());
        w.WriteLine(logMessage);
        w.WriteLine("-----------------------------------------------------------------------");
    }
}

當我同時啟動兩次此代碼時,出現異常,因為該文件已在另一個實例中打開。

除了可以從兩個實例寫入相同文件的“ StreamWriter”之外,還有其他選擇嗎?

實際上,StramWriter需要在向文件處理程序中寫入內容后關閉它。 因此,通過使用Using語句,您將該任務(關閉文件處理程序)交給了Using (這是它的好處之一),因此,如果由於任何原因在Using塊中等待(您已添加Console.ReadLine()),文件處理程序將打開直到該塊結束。

如果以上代碼正確無誤:

class Program
{
     static void Main(string[] args)
     {
         using (StreamWriter w = File.AppendText(@"C:\temp\log.txt"))
         {
             Log("Test1", w);
         }
         Console.ReadLine();
     }

     public static void Log(string logMessage, TextWriter w)
     {
         w.WriteLine(DateTime.Now.ToShortDateString() + " | " + DateTime.Now.ToLongTimeString());
         w.WriteLine(logMessage);
         w.WriteLine("-----------------------------------------------------------------------");
     }
 }

並發的機會應該很小。 但是可能會發生,您可以使用try catch塊和while語句來確保您的日志已提交。

class Program
{
     static void Main(string[] args)
     {
         bool WriteDone = false;
         while(!WriteDone)
         {
             try 
             {
                 using (StreamWriter w = File.AppendText(@"C:\temp\log.txt"))
                 {
                    Log("Test1", w);
                 }
                 WriteDone = true;
              } 
              catch 
              { 
                   System.Threading.Thread.Sleep(1000); // Wait for 1s and try again
              }
         }
         Console.ReadLine();
     }

     public static void Log(string logMessage, TextWriter w)
     {
         w.WriteLine(DateTime.Now.ToShortDateString() + " | " + DateTime.Now.ToLongTimeString());
         w.WriteLine(logMessage);
         w.WriteLine("-----------------------------------------------------------------------");
     }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM