文件流FileStream的讀寫


1、FileStream文件流的概念:

  FileStream 類對文件系統上的文件進行讀取、寫入、打開和關閉操作,並對其他與文件相關的操作系統句柄進行操作,如管道、標准輸入和標准輸出。讀寫操作可以指定為同步或異步操作。FileStream 對輸入輸出進行緩沖,從而提高性能。——MSDN

  簡單點說:FileStream類可以對任意類型的文件進行讀取操作,而且我們也可以根據自己需要來指定每一次讀取字節長度,以此減少內存的消耗,提高讀取效率。

2、File和FileStream的區別

  直觀點:File是一個靜態類;FileStream是一個非靜態類。

  File:是一個文件的類,對文件進行操作。其內部封裝了對文件的各種操作(MSDN:提供用於創建、復制、刪除、移動和打開單一文件的靜態方法,並協助創建FileStream對象)。

  FileStream:文件流的類。對txt,xml,avi等文件進行內容寫入、讀取、復制...時候需要使用的一個工具。

  打個形象的比喻。File是筆記本,需要Filestream的這個筆才能寫.

  換而言之,記事本是一個文件,可以用File操作,里面的內容需要用FileStream來操作。

注:FileStream是對字節操作的(任何文件)。

3、使用FileStream讀取數據、使用using幫我們結束后自動釋放資源不用寫Close()和Dispose()方法。

        /// <summary>
        /// 使用FileStream讀取文件
        /// </summary>
        /// <param name="path">要讀取的文件路徑</param>
        /// <param name="str"></param>
        public static string FileStreamRead(string path)
        {
            using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
            {
                byte[] buffer = new byte[1024*1024*5];//每次讀取5M長度
                int r=  fsRead.Read(buffer, 0, buffer.Length);//返回本次實際讀取到的有效字節數
                string str = Encoding.UTF8.GetString(buffer, 0, r);//使用utf-8編碼格式
                return str;
            }

        }    

  

4、使用FileStream寫入數據

 1         /// <summary>
 2         /// 使用FileStream寫入數據
 3         /// </summary>
 4         /// <param name="path">要寫入文件的路徑</param>
 5         /// <param name="str">要寫入的字符串</param>
 6         public static void FileStreamWrite(string path,string str)
 7         {
 8             using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
 9             {
10                 byte[] buffer = Encoding.UTF8.GetBytes(str);
11                 //使用utf-8編碼格式
12                 fsWrite.Write(buffer, 0, buffer.Length);
13             }
14 
15         }

無論是讀還是寫,都要借助一個緩沖區buffer來存取字節。

注意:在寫入和讀取時,字符編碼格式要相同,不然會出現亂碼。

 Encoding.UTF8.GetBytes(str);
 Encoding.UTF8.GetString(b, 0, r);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM