这两个在调整以前写过的代码,把以前代码里面的一些小问题都改了一下,这其中有一个文件操作的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(); } } } }