亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現一個簡單實用的TXT文本操作及日志框架詳解

2019-10-29 21:01:16
字體:
來源:轉載
供稿:網友

前言

首先先介紹一下這個項目,該項目實現了文本寫入及讀取,日志寫入指定文件夾或默認文件夾,日志數量控制,單個日志大小控制,通過約定的參數讓用戶可以用更少的代碼解決問題。

1.讀取文本文件方法

使用:JIYUWU.TXT.TXTHelper.ReadToString(“文件物理路徑”)

public static string ReadToString(string path) {  try  {  LogLock.EnterReadLock();  StreamReader sr = new StreamReader(path, Encoding.UTF8);  StringBuilder sb = new StringBuilder();  string line;  while ((line = sr.ReadLine()) != null)  {   sb.AppendLine(line.ToString());  }  sr.Close();  sr.Dispose();  return sb.ToString();  }  catch (IOException e)  {  Console.WriteLine(e.ToString());  return null;  }  finally  {  LogLock.ExitReadLock();  } }

實現解析:

(1.為防止任務讀取當我們進行讀取時需要添加讀取鎖保證可以依次讀取,否則可能出現被占用異常。

(2.創建讀取流StreamReader(注意:由于會出現亂碼這里要改一下把默認改為Encoding.UTF8),依次讀取每一行。

(3.讀取完成釋放資源。并解鎖。

2.寫入文本文件方法

(1.創建文本并寫入

使用:JIYUWU.TXT.TXTHelper.CreateWrite(“文件物理路徑”,“文本內容”)

public static bool CreateWrite(string path, string context) {  bool b = false;  try  {  LogLock.EnterWriteLock();  FileStream fs = new FileStream(path, FileMode.Create);  //獲得字節數組  byte[] data = System.Text.Encoding.Default.GetBytes(context);  //開始寫入  fs.Write(data, 0, data.Length);  //清空緩沖區、關閉流  fs.Flush();  fs.Close();  return b;  }  catch (Exception ex)  {  Console.WriteLine(ex.ToString());  return b;  }  finally  {  LogLock.ExitWriteLock();  } }

(2.在文本文件末尾追加寫入

使用:JIYUWU.TXT.TXTHelper.WriteAppend(“文件物理路徑”,“文本內容”)

public static bool WriteAppend(string path, string context) {  bool b = false;  try  {  LogLock.EnterWriteLock();  FileStream fs = new FileStream(path, FileMode.Append);  StreamWriter sw = new StreamWriter(fs);  //開始寫入  sw.Write(context);  //清空緩沖區  sw.Flush();  //關閉流  sw.Close();  fs.Close();  return b;  }  catch (Exception ex)  {  Console.WriteLine(ex.ToString());  return b;  }  finally  {  LogLock.ExitWriteLock();  } }

(3.自動判斷換行追加或創建文本

使用:JIYUWU.TXT.TXTHelper.CreateOrWriteAppendLine(“文件物理路徑”,“文本內容”)

public static bool CreateOrWriteAppendLine(string path, string context) {  bool b = false;  try  {  LogLock.EnterWriteLock();  if (!File.Exists(path))  {   FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);   StreamWriter sw = new StreamWriter(fs);   long fl = fs.Length;   fs.Seek(fl, SeekOrigin.End);   sw.WriteLine(context);   sw.Flush();   sw.Close();   fs.Close();   b = true;  }  else  {   FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write);   StreamWriter sw = new StreamWriter(fs);   long fl = fs.Length;   fs.Seek(fl, SeekOrigin.Begin);   sw.WriteLine(context);   sw.Flush();   sw.Close();   fs.Close();   b = true;  }  return b;  }  catch (Exception ex)  {  Console.WriteLine(ex.ToString());  return b;  }  finally  {  LogLock.ExitWriteLock();  } }

實現解析:

(1)為防止多任務讀取當我們進行讀取時需要添加讀取鎖保證可以依次寫入,否則可能出現被占用異常。

(2)創建文本流FileStream及寫入流StreamWriter,直接進行數據寫入。

(3)讀取完成釋放資源。并解鎖。

3.寫入日志

使用:JIYUWU.TXT.TXTHelper.WriteLog(“文本內容”,“單個文件大小(選填默認1M)”,“目錄下文件數量(選填默認20個)”,“輸出目錄(選填默認bin文件下)”)

public static void WriteLog(string content, int fileSize = 1, int fileCount = 20, string filePath = "") {  try  {  if (!string.IsNullOrWhiteSpace(filePath))  {   logPath = filePath;  }  LogLock.EnterWriteLock();  logPath = logPath.Replace("file://", "");//這里為了兼容webapi的情況  string dataString = DateTime.Now.ToString("yyyy-MM-dd");  string path = logPath + "//MyLog";  if (!Directory.Exists(path))  {   Directory.CreateDirectory(path);   path += "//";   path += DateTime.Now.ToString("yyyy-MM-dd") + ".txt";   FileStream fs = new FileStream(path, FileMode.Create);   fs.Close();  }  else  {   int x = System.IO.Directory.GetFiles(path).Count();   path += "//";   Dictionary<string, DateTime> fileCreateDate = new Dictionary<string, DateTime>();   string[] filePathArr = Directory.GetFiles(path, "*.txt", SearchOption.TopDirectoryOnly);   if (filePathArr.Length == 0)   {   string sourceFilePath = path;   path += DateTime.Now.ToString("yyyy-MM-dd") + ".txt";   FileStream fs = new FileStream(path, FileMode.Create);   fs.Close();   filePathArr = Directory.GetFiles(sourceFilePath, "*.txt", SearchOption.TopDirectoryOnly);   }   for (int i = 0; i < filePathArr.Length; i++)   {   FileInfo fi = new FileInfo(filePathArr[i]);   fileCreateDate[filePathArr[i]] = fi.CreationTime;   }   fileCreateDate = fileCreateDate.OrderBy(f => f.Value).ToDictionary(f => f.Key, f => f.Value);   FileInfo fileInfo = new FileInfo(fileCreateDate.Last().Key);   if (fileInfo.Length < 1024 * 1024 * fileSize)   {   path = fileCreateDate.Last().Key;   }   else   {   path += DateTime.Now.ToString("yyyy-MM-dd") + ".txt";   FileStream fs = new FileStream(path, FileMode.Create);   fs.Close();   }   if (x > fileCount)   {   File.Delete(fileCreateDate.First().Key);   }  }  FileStream fs2 = new FileStream(path, FileMode.Open, FileAccess.Write);  StreamWriter sw = new StreamWriter(fs2);  long fl = fs2.Length;  fs2.Seek(fl, SeekOrigin.Begin);  sw.WriteLine(DateTime.Now.ToString("hh:mm:ss") + "---> " + content);  sw.Flush();  sw.Close();  fs2.Close();  }  catch (Exception ex)  {  Console.WriteLine(ex.ToString());  }  finally  {  LogLock.ExitWriteLock();  } }

實現解析(以全部默認參數為例說明):

(1.為防止多任務進行操作,于是對文檔加一個寫入鎖,否則可能出現被占用異常。

(2.檢測文件目錄是否已存在,不存在則創建目錄并創建日志文件,存在就判斷文件數量和大小,文件大小超過設置的值或默認值就新建一個文本,文件數量超過默認值或設置值就刪除最早的一個文件。

(3.寫入到指定文件。

(4.完成釋放資源。并解鎖。

項目框架就介紹到這里吧,后期還會將功能擴展,不多說了源碼地址:

(可能存在沒有測到的bug,出現的問題可以反饋給我,謝謝您的支持)。

問題匯總:

bug1:程序包中讀取txt可能出現亂碼,讀取流中改一下把默認改為Encoding.UTF8應該就可以了。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频精品免费播放| 成人精品网站在线观看| 国产欧美精品一区二区三区-老狼| 亚洲精品国精品久久99热| 久久久久亚洲精品| 日韩在线观看免费高清| 国外成人在线视频| 精品性高朝久久久久久久| 亚洲大胆人体在线| 亚洲免费中文字幕| 日韩av三级在线观看| 97在线视频精品| 欧美精品免费在线| 亚洲黄色www| 亚洲一区二区自拍| 国产精品美女网站| 亚洲国产天堂网精品网站| 国产精品久久久久久久久免费看| 狠狠躁夜夜躁人人爽天天天天97| 在线看福利67194| 在线视频免费一区二区| 亚洲国产精品成人一区二区| 国产精品久久色| 免费成人高清视频| 欧美成年人在线观看| 欧美激情高清视频| www.99久久热国产日韩欧美.com| 91av在线国产| 欧美www在线| 国产精品日韩在线一区| 欧美视频一二三| 久久精品国产欧美激情| 国产一区二区丝袜| 国产精品1区2区在线观看| 欧美精品激情在线观看| 亚洲人成在线一二| 久久久999成人| 国产精品久久9| 色777狠狠综合秋免鲁丝| 欧美巨大黑人极品精男| 中文字幕欧美日韩| 日本午夜人人精品| 亚洲欧美在线一区二区| 国产区精品在线观看| 欧洲s码亚洲m码精品一区| 国自在线精品视频| 欧美一性一乱一交一视频| 国产午夜精品全部视频在线播放| 久久综合免费视频影院| 韩国精品美女www爽爽爽视频| 91老司机在线| 欧美精品久久久久久久免费观看| 精品国产一区二区三区四区在线观看| 91精品综合久久久久久五月天| 亚洲男人的天堂在线| 欧美日韩国产页| 国产成人短视频| 久久99精品国产99久久6尤物| 国产成人精品在线播放| 欧美一级在线亚洲天堂| www高清在线视频日韩欧美| 国产精品永久免费观看| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲欧美日韩精品久久| 亚洲欧美激情视频| 国产日韩欧美视频在线| 精品久久久久久亚洲国产300| 亚洲欧美制服第一页| 浅井舞香一区二区| 久久精品一区中文字幕| 久久久久久18| 中文字幕亚洲图片| 中文字幕精品网| 欧美激情一级二级| 国产精品视频精品视频| 2020久久国产精品| 亚洲视频在线看| 亚洲最大av在线| 视频在线观看99| 中文字幕在线观看日韩| 97国产在线视频| 亚洲一区二区三区香蕉| 国产欧美一区二区| 亚洲精品视频在线播放| 亚洲电影天堂av| 国产精品第三页| 欧美性极品少妇精品网站| 一个人看的www欧美| 亚洲色图25p| 亚洲欧美中文日韩在线v日本| 久久国产一区二区三区| 国产一区二区视频在线观看| 欧美激情综合亚洲一二区| 国产精品麻豆va在线播放| 亚洲精品日韩在线| 国产日韩亚洲欧美| 亚洲欧美日韩成人| 精品国产福利视频| 欧美激情在线有限公司| 亚洲国产精彩中文乱码av| 国产亚洲视频中文字幕视频| 亚洲免费成人av电影| 亚洲欧美日韩综合| 中文字幕日韩欧美| 成人免费观看网址| 粉嫩av一区二区三区免费野| 亚洲偷欧美偷国内偷| 欧美视频一二三| 国产精品久久久久久影视| 青青在线视频一区二区三区| 国产成人一区三区| 伊人久久五月天| 欧美午夜视频在线观看| 亚洲专区中文字幕| 亚洲福利在线视频| 91精品国产乱码久久久久久蜜臀| 中文字幕av一区二区| 日韩美女激情视频| 亚洲国产精品久久久久久| 国产aaa精品| 国产乱人伦真实精品视频| 亚洲电影第1页| 91国内免费在线视频| 岛国av一区二区三区| 欧美怡红院视频一区二区三区| 在线亚洲国产精品网| 精品动漫一区二区| 美女国内精品自产拍在线播放| 日韩三级成人av网| 中文字幕不卡在线视频极品| 国产精品jizz在线观看麻豆| 欧美大全免费观看电视剧大泉洋| 97在线观看免费高清| 日韩免费视频在线观看| 欧美视频免费在线观看| 国产91露脸中文字幕在线| 欧美日韩高清在线观看| 日本国产欧美一区二区三区| 欧美成人精品h版在线观看| 日韩成人av一区| 久久精品久久久久久国产 免费| 国产精品久久久久久久久借妻| 亚洲欧美中文另类| 欧美大成色www永久网站婷| 欧美性理论片在线观看片免费| 日韩欧美有码在线| 国产精品视频xxxx| 色狠狠久久aa北条麻妃| 亚洲网站视频福利| 日韩欧美在线视频免费观看| 国产精品久久久久久久久借妻| 亚洲国产古装精品网站| 国内伊人久久久久久网站视频| 久久国产加勒比精品无码| 国产精品jizz在线观看麻豆| 亚洲免费视频一区二区| 亚洲精品少妇网址| 午夜免费久久久久| 97在线看免费观看视频在线观看| 日韩精品免费综合视频在线播放| 欧美亚洲国产日本| 人九九综合九九宗合| 日韩有码视频在线| 韩日欧美一区二区|