日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用MemoryStream和FileStream

發布時間:2023/12/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。