這兩個在調整以前寫過的代碼,把以前代碼里面的一些小問題都改了一下,這其中有一個文件操作的BUG,我在這里講一下。
一般系統都會有自己的日志模塊,來快速確定系統發生異常的位置,我這里的一個項目的日志系統是自己用System.IO.File這個類來寫的,當Web上面同時發生兩個請求時,日志模塊會同時操作一個文件導致系統異常。以前的解決辦法是把打日志的等級調高,來做到少打日志。今天在群里面專門找人問了一下,終於解決了這個問題。我們先看一下我以前是怎么寫的吧。
static object obj = new object(); /// <summary> /// 創建一個TXT文件 /// </summary> /// <param name="FILE_NAME">文件路徑</param> /// <param name="str">內容</param> public static void WriteFile(string FILE_NAME, string str) { System.IO.StreamWriter sw = null; sw = System.IO.File.AppendText(FILE_NAME); sw.WriteLine(str); lock (obj) { sw.Flush(); sw.Close(); } }
這里我們看到我妄想用文件鎖的方式來解決這樣的問題。但是沒有什么效果,現在改為下面的方式,就完全沒有了文件操作的問題。
/// <summary> /// 創建一個TXT文件 /// </summary> /// <param name="FILE_NAME">文件路徑</param> /// <param name="str">內容</param> public static void WriteFile(string FILE_NAME, string str) { using (FileStream fs = new FileStream(FILE_NAME, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) { if (fs.CanWrite) { using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default)) { sw.WriteLine(str); sw.Flush(); } } } }