文章出處
文章列表
流無處不在,只要是關于到文件的輸入、輸出、更新等,關于IO流,項目中還是經常用到的,寫log日志免不了要與其打交道,現在需要用到,就順道好好回顧一下進行整理,首先是幾個需要用到的類的說明,其實說簡單點,就是對文件夾、文件、文件內容進行編輯。
1. 創建文件、文件夾
public void OperationFile() { //創建文件 if (!File.Exists("Log.txt")) { File.Create("Log.txt"); } //創建文件夾 if (!Directory.Exists("Log")) { Directory.CreateDirectory("Log"); } }
2. 讀寫數據到文件中
FileStream 原始,比較復雜,處理的數據多
讀取文件數據
public void ReadFileStream() { //打開數據 //FileStream fs = File.OpenRead("201704191450.txt"); //FileInfo fileinfo = new FileInfo("201704191450.txt"); //FileStream fs = fileinfo.OpenRead(); //讀取數據 byte[] bytedata = new byte[100]; char[] chardata = new char[100]; FileStream ffs = new FileStream("TestRead.txt",FileMode.Open); //執行文件指針位置 ffs.Seek(10,SeekOrigin.Begin); //讀取數據,其起始位置為seek指定的指針位置末 ffs.Read(bytedata,0,100); //設置轉碼格式 Decoder d = Encoding.UTF8.GetDecoder(); d.GetChars(bytedata,0,bytedata.Length,chardata,0); Console.WriteLine(chardata); Console.ReadKey(); }
寫入文件數據
public void WriteFileStream() { //寫入數據 byte[] byteData = new byte[100]; char[] charData = new char[100]; FileStream fis = new FileStream("TestWrite.txt", FileMode.Create); charData = ("This is a jokey").ToArray(); byteData = new byte[charData.Length]; Encoder e = Encoding.UTF8.GetEncoder(); e.GetBytes(charData, 0, charData.Length, byteData, 0, true); fis.Seek(0, SeekOrigin.Begin); fis.Write(byteData, 0, byteData.Length); }
由此可見,操作字符數據比較麻煩。而StreamWritrer、StreamReader不需要設置指針位置,讀寫文件時,比較靈活
StreamReader讀取文件數據
/// <summary> /// StreamReader讀取日志 /// </summary> public void ReadLog() { StreamReader sr = new StreamReader("201704191451.txt", true); string line = sr.ReadLine(); while (line!=null) { Console.WriteLine(line); line = sr.ReadLine(); } sr.Close(); }
StreamWriter寫入文件數據
/// <summary> /// StreamWrite寫入日志 /// </summary> /// <param name="ex"></param> public void WriteExLog(string ex) { StreamWriter sw = new StreamWriter(DateTime.Now.ToString("yyyyMMddHHmm")+".txt",true); sw.WriteLine(DateTime.Now.ToString("G")+" "+ex); sw.Close(); }
兩者一進行對比,可見StreamWriter、StreamReader確實比FileStream方便很多
關于流文件的使用,上面僅僅是單一的操作,實際項目中,多為混合模式,各種判斷柔和在一起,這里也不多說什么,先寫一個相對來書綜合點的方法
public void OperationStream() { //當前Debug下+創建文件夾 string straddrsfile = AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar.ToString() + "Test1"; //當前路徑+文件名 string straddrspath = straddrsfile + Path.DirectorySeparatorChar.ToString() + "Test1" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xml"; straddrspath = straddrspath.Replace("\\", "/"); if (!File.Exists(straddrsfile)) { //創建文件夾 Directory.CreateDirectory(straddrsfile); //創建文件 StreamWriter sw = new StreamWriter(straddrspath,true); //寫入數據 sw.WriteLine(DateTime.Now.ToString("G") + "This is a jokey"); sw.Close(); //讀取數據 StreamReader sr = new StreamReader(straddrspath,true); string line = sr.ReadLine(); //輸出數據 while (line != null) { Console.WriteLine(line); line = sr.ReadLine(); } sr.Close(); Console.ReadKey(); } }
對于這些流關聯的類,其重載的方法有很多,向那些參數的說明,指尖敲擊下鍵盤,點下聯想看看說明,就出來,總之,深入的研究清一個問題需要大量的時間,結果還未可知,當前項目既然需要這個日志,就稍稍鞏固下
市人皆大笑,舉手揶揄之
文章列表
全站熱搜