首先先介紹一下這個項目,該項目實現了文本寫入及讀取,日志寫入指定文件夾或默認文件夾,日志數量控制,單個日志大小控制,通過約定的參數讓用戶可以用更少的代碼解決問題。
1.讀取文本文件方法
使用:JIYUWU.TXT.TXTHelper.ReadToString(“文件物理路徑”)
實現解析:
(1.為防止任務讀取當我們進行讀取時需要添加讀取鎖保證可以依次讀取,否則可能出現被占用異常。
(2.創建讀取流StreamReader(注意:由於會出現亂碼這里要改一下把默認改為Encoding.UTF8),依次讀取每一行。
(3.讀取完成釋放資源。並解鎖。
2.寫入文本文件方法
(1.創建文本並寫入
使用:JIYUWU.TXT.TXTHelper.CreateWrite(“文件物理路徑”,“文本內容”)
(2.在文本文件末尾追加寫入
使用:JIYUWU.TXT.TXTHelper.WriteAppend(“文件物理路徑”,“文本內容”)
(3.自動判斷換行追加或創建文本
使用:JIYUWU.TXT.TXTHelper.CreateOrWriteAppendLine(“文件物理路徑”,“文本內容”)
1 public static bool CreateOrWriteAppendLine(string path, string context) 2 { 3 bool b = false; 4 try 5 { 6 LogLock.EnterWriteLock(); 7 if (!File.Exists(path)) 8 { 9 FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write); 10 StreamWriter sw = new StreamWriter(fs); 11 long fl = fs.Length; 12 fs.Seek(fl, SeekOrigin.End); 13 sw.WriteLine(context); 14 sw.Flush(); 15 sw.Close(); 16 fs.Close(); 17 b = true; 18 } 19 else 20 { 21 FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write); 22 StreamWriter sw = new StreamWriter(fs); 23 long fl = fs.Length; 24 fs.Seek(fl, SeekOrigin.Begin); 25 sw.WriteLine(context); 26 sw.Flush(); 27 sw.Close(); 28 fs.Close(); 29 b = true; 30 } 31 return b; 32 } 33 catch (Exception ex) 34 { 35 Console.WriteLine(ex.ToString()); 36 return b; 37 } 38 finally 39 { 40 LogLock.ExitWriteLock(); 41 } 42 }
實現解析:
(1)為防止多任務讀取當我們進行讀取時需要添加讀取鎖保證可以依次寫入,否則可能出現被占用異常。
(2)創建文本流FileStream及寫入流StreamWriter,直接進行數據寫入。
(3)讀取完成釋放資源。並解鎖。
3.寫入日志
使用:JIYUWU.TXT.TXTHelper.WriteLog(“文本內容”,“單個文件大小(選填默認1M)”,“目錄下文件數量(選填默認20個)”,“輸出目錄(選填默認bin文件下)”)
實現解析(以全部默認參數為例說明):
(1.為防止多任務進行操作,於是對文檔加一個寫入鎖,否則可能出現被占用異常。
(2.檢測文件目錄是否已存在,不存在則創建目錄並創建日志文件,存在就判斷文件數量和大小,文件大小超過設置的值或默認值就新建一個文本,文件數量超過默認值或設置值就刪除最早的一個文件。
(3.寫入到指定文件。
(4.完成釋放資源。並解鎖。
項目框架就介紹到這里吧,后期還會將功能擴展,不多說了源碼地址:
https://download.csdn.net/download/silverbutter/10569972 (可能存在沒有測到的bug,出現的問題可以反饋給我,謝謝您的支持)。
問題匯總:
bug1:程序包中讀取txt可能出現亂碼,讀取流中改一下把默認改為Encoding.UTF8應該就可以了。
