文章出處

     流無處不在,只要是關于到文件的輸入、輸出、更新等,關于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();
            }
      }

對于這些流關聯的類,其重載的方法有很多,向那些參數的說明,指尖敲擊下鍵盤,點下聯想看看說明,就出來,總之,深入的研究清一個問題需要大量的時間,結果還未可知,當前項目既然需要這個日志,就稍稍鞏固下

 

 

市人皆大笑,舉手揶揄之

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()