a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > 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.創(chuàng)建讀取流StreamReader(注意:由于會出現亂碼這里要改一下把默認改為Encoding.UTF8),依次讀取每一行。

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

2.寫入文本文件方法

(1.創(chuàng)建文本并寫入

使用: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);  //獲得字節(jié)數組  byte[] data = System.Text.Encoding.Default.GetBytes(context);  //開始寫入  fs.Write(data, 0, data.Length);  //清空緩沖區(qū)、關閉流  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);  //清空緩沖區(qū)  sw.Flush();  //關閉流  sw.Close();  fs.Close();  return b;  }  catch (Exception ex)  {  Console.WriteLine(ex.ToString());  return b;  }  finally  {  LogLock.ExitWriteLock();  } }

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

使用: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)創(chuàng)建文本流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.檢測文件目錄是否已存在,不存在則創(chuàng)建目錄并創(chuàng)建日志文件,存在就判斷文件數量和大小,文件大小超過設置的值或默認值就新建一個文本,文件數量超過默認值或設置值就刪除最早的一個文件。

(3.寫入到指定文件。

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

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

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

問題匯總:

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

總結

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


注:相關教程知識閱讀請移步到c#教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品影院| 成人看片在线观看 | 日本在线三级 | 国产精品久久精品 | 欧美久久精品 | 在线观看欧美一区 | 色播开心网 | 成人精品一区二区三区中文字幕 | 国产激情午夜 | 毛片视频播放 | 国产精品免费观看 | 99re热精品视频 | 亚洲国产成人在线 | 射久久| 亚洲大胆人体视频 | 久久免费在线观看 | 国产一区二区三区免费 | 91午夜精品一区二区三区 | 成人a在线视频免费观看 | 亚洲欧美日本在线 | 欧美亚洲视频 | 黄色成人av网站 | 久久国产精品99久久久久久牛牛 | 亚洲欧美日韩另类精品一区二区三区 | 精品三区| 四虎成人在线播放 | 草视频在线 | 一级黄色短片 | www久久久久久久 | 久久国产精品影视 | 久久免费电影 | 久久久片| 97成人在线免费视频 | 伊人av在线 | 国产精品一区二区久久精品爱微奶 | 久久免费国产精品 | 欧美日韩视频在线观看免费 | 精品久久久中文字幕 | 奇米色欧美一区二区三区 | 国产91在线播放精品91 | 国产一区二区三区四区在线观看 |