Stream、FileStream、MemoryStream的區別
1.Stream:流,在msdn的定義:提供位元組序列的一般性檢視,Stream提供了讀寫流的方法是以位元組的形式從流中讀取內容。而我們經常會用到從位元組流中讀取文字或者寫入文字,微軟提供了StreamReader和StreamWriter類幫我們實現在流上讀寫字串的功能。
2.FileStream:檔案流,繼承Stream。一個FileStream類的例項實際上代表一個檔案流,使用FileStream類可以對檔案系統上的檔案進行讀取、寫入、開啟和關閉操作。
public class FileStream : 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
•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"); //這樣是返回只讀檔案流。
3.MemoryStream:和檔案流不同,MemoryStream類表示的是儲存在記憶體中的資料流,由記憶體流封裝的資料可以在記憶體中直接訪問。記憶體一般用於暫時快取資料以降低應用程式對臨時緩衝區和臨時檔案的需要。
相關用法:
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;