[英]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.