stream,file,filestream,memorystream簡單的整理

1、Stream
  什麼是stream?(https://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html#no8)html

  定義:提供字節序列的通常視圖。緩存

  什麼是字節序列?
  定義:字節按照必定的順序進行排序組成了字節序列,字節對象都被存儲爲連續的字節序列。
  一個字節由8個二進制組成。異步

  stream類的結構,屬性和方法
  構造函數:
  stream類由一個protected類型的構造函數,可是它是個抽象類,沒法直接以下使用
  Stream stream = new Stream();
  因此咱們自定義一個流繼承自Stream看看那些屬性必須重寫或者自定義:函數

  1.CanRead:只讀屬性,判斷該流是否可以讀取;
  2.CanSeek:只讀屬性,判斷該流是否支持跟蹤查找;
  3.CanWrite:只讀屬性,判斷當前流是否可寫;
  4.Void Flush():當咱們使用流寫文件時,數據流會先進入到緩衝區中,而不會馬上寫入文件,當執行這個方法後,緩衝區的數據流會當即注入基礎流。(使用此方法能夠將全部信息從基礎緩衝區移動到其目標或清除緩衝區,或者同時執行這種操做。
  當使用StreamWrite或者BinaryWrite類時,不要刷新Stream基對象而應該使用該類的Flush或Close方法,此方法確保首先將該數據刷新至基礎流,而後再將其寫入文件。
  5.Length:表示流的長度
  6.Position屬性:雖然從字面中能夠看出這個Position屬性只是標示了流中的一個位置,當Stream對象被緩存了,會致使Position屬性在流中沒法找到正確的位置,解決方案:用Using語句將流對象包裹起來,用完以後關閉回收便可。(using()語句會自動回收)編碼


2、File
  提供用於建立、複製、刪除、移動和打開單一文件的靜態方法,並協助建立 FileStream 對象。
  繼承 Object->File
  方法:
  AppendAllLines(String Filepath, IEnumerable<String> content) FilePath: 須要追加內容的文件 content:須要追加的行File.AppendAllText(String filepath,String content,Encoding) 將指定的字符串追加到文件中,若是文件還不存在則建立該文件encoding 字符編碼
  public static System.IO.StreamWriter AppendText (string path);返回StreamWriter一個流寫入器,它將 UTF-8 編碼文本追加到指定文件或新文件。 建立一個StreamWriter,它將 UTF-8 編碼文本追加到現有文件或新文件(若是指定文件不存在)
  public static void Copy (string sourceFileName, string destFileName);sourceFileName 要複製的文件。destFileName 目標文件的名稱,它不能是一個目錄或現有文件.
  public static System.IO.FileStream Create (string path);//path要建立的文件的路徑及名稱。返回一個FileStream,它提供對 path 中指定的文件的讀/寫訪問。操作系統

eg.  orm

using (FileStream fs = File.Create(path))
  {
    Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
    // Add some information to the file.
    fs.Write(info, 0, info.Length);
  }htm

  public static System.IO.FileStream Create (string path, int bufferSize);//path要建立的文件的路徑及名稱 bufferSize Int32用於讀取和寫入到文件的已放入緩衝區的字節數。返回FileStream一個具備指定緩衝區大小的 FileStream,它提供對 path 中指定的文件的讀/寫訪問。
  public static System.IO.FileStream OpenRead (string path);//打開文件進行讀取,返回FileStream指定路徑上的只讀FileStream。
  public static void Move (string sourceFileName, string destFileName);//文件移動,從sourceFileName移動到destFileName


3、FileStream
  爲文件提供stream,既支持同步讀寫又支持異步讀寫。是對文件的操做,繼承自Stream。
  方法:
  public FileStream(string path, FileMode mode, FileAccess access);
  path指明文件所在的路徑信息;
  mode是FileMode的枚舉值,表示文件打開或建立的方式
  CreateNew:指定操做系統應建立新文件,若是文件已經存在,則引起IOException;
  Create:指定操做系統應建立新文件,若是文件已經存在,它將被覆蓋;
  Open:指定操做系統應打開現有文件,若是文件不存在,則引起FileNotFoundException;
  OpenOrCreate:指定操做系統應打開文件,若是文件不存在,則建立新文件;
  Truncate:指定操做系統應打開現有文件,文件一旦打開,就將截斷爲零字節大小;
  Append:打開先有文件並把Position設置至文件尾,若是文件不存在將建立新文件。Append只能同FileAccess.Write一塊兒使用對象

  access是FileAccess的枚舉值,它控制對文件的訪問權限
  Read:打開文件用於只讀;
  Write:打開文件用於只寫;
  ReadWrite:打開文件,用於讀寫;
  //建立新文件
  FileStream fileStream = new FileStream(@"d:\test.txt", FileMode.Create);
  //讀取
  FileStream fileStream= new FileStream(@"d:\test.txt", FileMode.Open);
  FileStream fs=File.OpenRead(@"c:\file.txt"); //這樣是返回只讀文件流。
4、MemoryStream
  和文件流不一樣,MemoryStream類表示的是保存在內存中的數據流,由內存流封裝的數據能夠在內存中直接訪問。內存通常用於暫時緩存數據以下降應用程序對臨時緩衝區和臨時文件的須要。
  相關用法:blog

  MemoryStream ms = new MemoryStream();
  byte[] buffer = new byte[stream.Length];
  stream.Position = 0;
  int arrbyte = stream.Read(buffer, 0, buffer.Length);
  ms.Write(buffer, 0, arrbyte);

  FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(FilePath), FileMode.Create);

  //寫入流文件
  ms.WriteTo(fs);

  //清空內存   ms.Close();   fs.Close();   fs = null;   ms = null;

相關文章
相關標籤/搜索