现在的位置: 首页 > 综合 > 正文

c# 中文件操作 文件被锁住的问题

2012年06月15日 ⁄ 综合 ⁄ 共 970字 ⁄ 字号 评论关闭

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

 

抱歉!评论已关闭.