使用MemoryStream和FileStream
生活随笔
收集整理的這篇文章主要介紹了
使用MemoryStream和FileStream
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用MemoryStream和FileStream
編程訪問文件是通過文件流對象進行的,當應用程序需要訪問文件時,必須先創建一個文件流對象,此流對象和文件是一一對應關系。在.NET中,使用抽象基類System.IO.Stream代表流,它提供Read和Write兩個方法。由于數據流的有序性,因此流對象還有一個讀寫指針,為此,Stream類還有一個Seek方法用于移動讀寫指針。
FileStream對象的數據來自文件,而MemoryStream對象的數據來自內存緩沖區。這兩個類都繼承自Stream類。
MemoryStream的數據來自內存中的一塊連續區域,這塊區域稱為“緩沖區(Buffer)”。可以把緩沖區看成一個數組,每個數組元素可以存放一個字節的數據。
在創建MemoryStream對象時,可以指定緩沖區的大小,并且可以在需要的時候更改。
//字節數組
????????byte[] buffer = new byte[600];
//填充字節數組
????????private void CreateExampleData()
????????{
????????????for(int i=0; i<600; i++)
????????????{
????????????????//byte類型的數最大不能超過255,用256取模實現
???????????????? buffer[i] = (byte)(i%256);
???????????? }????????????
???????? }內存流的基本使用方法:
private void OnTestMemory()
????????{
????????????//創建測試數據
???????????? CreateExampleData();
????????????
????????????//創建內存流對象,初始分配50字節的緩沖區
???????????? MemoryStream mem = new MemoryStream(50);
????????????//向內存流中寫入字節數組的所有數據
???????????? mem.Write(buffer,0,buffer.GetLength(0));
???????????? MessageBox.Show("寫入數據后的內存流長度:" + mem.Length.ToString());
???????????? MessageBox.Show("分配給內存流的緩沖區大小:" + mem.Capacity.ToString());
???????????? mem.SetLength(550);
???????????? MessageBox.Show("調用SetLength方法后的內存流長度:" + mem.Length.ToString());
???????????? mem.Capacity = 620;//此值不能小于Length屬性
???????????? MessageBox.Show("調用Capacity方法后緩沖區大小:" + mem.Capacity.ToString());
????????????//將讀寫指針移到距流開頭10個字節的位置
???????????? mem.Seek(10,SeekOrigin.Begin);
???????????? MessageBox.Show(mem.ReadByte().ToString());
???????????? mem.Close();
???????? }內存流的Length屬性代表了其中存放的數據的真實長度,而Capacity屬性則代表了分配給內存流的內存空間大小。
可以使用字節數組創建一個固定大小的MemoryStream,
MemoryStream mem = new MemoryStream(buffer);這時,無法再設置Capacity屬性的大小。
還可以創建只讀的內存流對象。
MemoryStream mem = new MemoryStream(buffer,false);
FlieStream用于存取文件。
創建文件并寫入內容:
//創建一個新文件
???????????? FileStream fsForWrite = new FileStream("test.data",FileMode.Create);
????????????try
????????????{????
????????????????//寫入一個字節
???????????????? fsForWrite.WriteByte(100);
???????????????? CreateExampleData();
????????????????//將字節數組寫入文件
???????????????? fsForWrite.Write(buffer,0,buffer.GetLength(0));
???????????? }
????????????catch(Exception ex)
????????????{????
???????????????? MessageBox.Show(ex.Message);
???????????? }
????????????finally
????????????{
????????????????//關閉文件
???????????????? fsForWrite.Close();
???????????? }打開文件并讀取內容:
private void ReadFromFile()
????????{
???????????? FileStream fsForRead = new FileStream("test.data",FileMode.Open);
????????????try
????????????{
????????????????//讀入一個字節
???????????????? MessageBox.Show("文件的第一個字節為:"+fsForRead.ReadByte().ToString());
????????????????//讀寫指針移到距開頭10個字節處
???????????????? fsForRead.Seek(10,SeekOrigin.Begin);
????????????????byte[] bs = new byte[10];
????????????????//從文件中讀取10個字節放到數組bs中
???????????????? fsForRead.Read(bs,0,10);
???????????? }
????????????catch(Exception ex)
????????????{????
???????????????? MessageBox.Show(ex.Message);
???????????? }
????????????finally
????????????{
???????????????? fsForRead.Close();???????? }
???????? }如果一個程序退出了,但它打開的文件沒有被關閉,將導致其他程序無法修改或刪除此文件。
轉載于:https://www.cnblogs.com/MikeChen/archive/2010/05/28/1746005.html
總結
以上是生活随笔為你收集整理的使用MemoryStream和FileStream的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2499元 联想YOGA无线吸拖一体机上
- 下一篇: 南京公交车路口限速被吐槽还没自行车快 官