c# 中文件操作 文件被鎖住的問題


這兩個在調整以前寫過的代碼,把以前代碼里面的一些小問題都改了一下,這其中有一個文件操作的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();
                    }
                }
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM