亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#讀取文件詳談

2020-01-24 03:09:18
字體:
來源:轉載
供稿:網友

c#里面封裝了幾乎所有我們可以想到的和我們沒有想到的類,流是讀取文件的一般手段,那么你真的會用它讀取文件中的數據了么?真的能讀完全么?

通常我們讀取一個文件使用如下的步驟:

1、聲明并使用File的OpenRead實例化一個文件流對象,就像下面這樣

復制代碼 代碼如下:

FileStream fs = File.OpenRead(filename);

或者
復制代碼 代碼如下:

FileStream fs = FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);

2、準備一個存放文件內容的字節數組,fs.Length將得到文件的實際大小,就像下面這樣 byte[] data = new byte[fs.Length];

3、哇!開始讀了,調用一個文件流的一個方法讀取數據到data數組中 fs.Read (data, 0, data.Length);

呵呵!我們只寫了3句就可以把文件里面的內容原封不動的讀出來,真是太簡潔了!可以這段代碼真的能像你預期的那樣工作么?

答案是:幾乎可以!在大部分情況下上面的代碼工作的很好,但是我們應該注意Read方法是有返回值的,既然有返回值那么一定有其道理,如果按照上面的寫法完全可以是一個沒有返回值的函數。我想返回值的目的是,為了給我們一個機會判斷實際讀取文件的大小,從而來判斷文件是否已經完全讀完。所以上面的代碼不能保證我們一定讀完了文件里面的所有字節(雖然在很多情況下是讀完了)。下面的方法提供了一個比上面方法更安全的方法,來保證文件被完全讀出

復制代碼 代碼如下:

public static void SafeRead (Stream stream, byte[] data)

{

int offset=0; int remaining = data.Length; // 只要有剩余的字節就不停的讀

while (remaining > 0)

{

int read = stream.Read(data, offset, remaining);

if (read <= 0) throw new EndOfStreamException("文件讀取到"+read.ToString()+"失??!"); // 減少剩余的字節數 remaining -= read; // 增加偏移量 offset += read;

}

}


有些情況下你不知道流實際的長度比如:網絡流。此時可以使用類似的方法讀取流直到流里面的數據完全讀取出來為止。我們可以先初始化一段緩存,再將流讀出來的流信息寫到內存流里面,就像下面這樣:
復制代碼 代碼如下:

public static byte[] ReadFully (Stream stream)

{

// 初始化一個32k的緩存

byte[] buffer = new byte[32768];

using (MemoryStream ms = new MemoryStream()){

//返回結果后會自動回收調用該對象的Dispose方法釋放內存

// 不停的讀取 while (true){

int read = stream.Read (buffer, 0, buffer.Length); // 直到讀取完最后的

3M數據就可以返回結果了

if (read <= 0) return ms.ToArray();

ms.Write (buffer, 0, read); }

}}


雖然上面的例子都比較簡單,效果也不是很明顯(大部分都是對的),也許你早就會了,沒關系這篇文章本來就是寫給初學者的。下面的方法提供了一種使用指定緩存長度的方式讀取流,雖然在很多情況下你可以直接使用Stream.Length得到流的長度,但是不是所有的流都可以得到。
復制代碼 代碼如下:

public static byte[] Read2Buffer (Stream stream, int BufferLen)

{

// 如果指定的無效長度的緩沖區,則指定一個默認的長度作為緩存大小

if (BufferLen < 1){ BufferLen = 0x8000; }

// 初始化一個緩存區 byte[] buffer = new byte[BufferLen]; int read=0; int block;

// 每次從流中讀取緩存大小的數據,知道讀取完所有的流為止

while ( (block = stream.Read(buffer, read, buffer.Length-read)) > 0)

{

// 重新設定讀取位置 read += block;

// 檢查是否到達了緩存的邊界,檢查是否還有可以讀取的信息

if (read == buffer.Length){

// 嘗試讀取一個字節 int nextByte = stream.ReadByte();

// 讀取失敗則說明讀取完成可以返回結果 if (nextByte==-1){ return buffer; }

// 調整數組大小準備繼續讀取

byte[] newBuf = new byte[buffer.Length*2]; Array.Copy(buffer, newBuf, buffer.Length);

newBuf[read]=(byte)nextByte; buffer = newBuf;

// buffer是一個引用(指針),這里意在重新設定buffer指針指向一個更大的內存 read++; }

} // 如果緩存太大則使用ret來收縮前面while讀取的buffer,


然后直接返回
復制代碼 代碼如下:

byte[] ret = new byte[read];

Array.Copy(buffer, ret, read); return ret;}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97婷婷大伊香蕉精品视频| 日韩精品视频免费| 成人精品视频99在线观看免费| 日韩一区视频在线| 欧美日韩综合视频| 亚洲欧洲黄色网| 久久精品在线播放| 一本色道久久综合亚洲精品小说| 久久免费视频在线观看| 欧美福利视频在线| 日韩一区av在线| 久久精品国产久精国产思思| 日韩在线激情视频| 亚洲欧美国产制服动漫| 国产欧美va欧美va香蕉在线| 亚洲免费电影在线观看| 亚洲黄色www网站| 裸体女人亚洲精品一区| 欧美裸体男粗大视频在线观看| 国产丝袜视频一区| 国产在线观看精品一区二区三区| 亚洲少妇中文在线| 亚洲bt欧美bt日本bt| 国产精品一区二区三区久久久| 国产精品普通话| 亚洲精品成人久久| 成人情趣片在线观看免费| 黑人巨大精品欧美一区二区免费| 亚洲国产欧美一区二区三区久久| 亚洲一区二区国产| 国产欧美日韩专区发布| 欧美激情第1页| 国产不卡精品视男人的天堂| 性欧美在线看片a免费观看| 亚洲丝袜av一区| 茄子视频成人在线| 亚洲视频日韩精品| 国产精品亚洲精品| 日韩av不卡电影| 国产精品人成电影在线观看| 91免费综合在线| 亚洲一区二区精品| 久久久久久噜噜噜久久久精品| 日韩女优人人人人射在线视频| 91免费版网站入口| 日韩av不卡电影| 国产精品自产拍在线观看中文| 亚洲乱码国产乱码精品精| 中文字幕精品影院| 91中文精品字幕在线视频| 久久国产精品久久久久久| 不卡中文字幕av| 欧美高清理论片| 热re99久久精品国产66热| 成人97在线观看视频| 琪琪亚洲精品午夜在线| 欧美伦理91i| 日韩一级裸体免费视频| 91综合免费在线| 欧美日韩爱爱视频| 久久免费少妇高潮久久精品99| 久久国产精品久久久久久久久久| 国产精品永久免费| 美女精品久久久| 国产欧美一区二区三区久久人妖| 欧美一区二区三区……| 日韩精品在线免费观看视频| 国产国产精品人在线视| 国产精品第一视频| 日本19禁啪啪免费观看www| 亚洲欧美成人精品| 91美女福利视频高清| 国产精品一区二区久久国产| 久久国产精品影视| 久久久久久亚洲精品中文字幕| 成人美女免费网站视频| 精品视频在线播放免| 精品偷拍各种wc美女嘘嘘| 国产精品视频在线播放| 欧美精品一区二区三区国产精品| 伊人亚洲福利一区二区三区| 日韩激情片免费| 欧洲亚洲免费在线| 亚洲激情在线观看视频免费| 久久久久亚洲精品| 91视频九色网站| 欧美精品日韩www.p站| 欧美性猛交xxxx| 91国内精品久久| 欧美色欧美亚洲高清在线视频| 中日韩午夜理伦电影免费| 精品久久久久久电影| 伊人一区二区三区久久精品| 亚洲国模精品私拍| 日韩国产欧美区| 日本高清不卡的在线| 中国china体内裑精亚洲片| 成人午夜一级二级三级| 久久久免费观看视频| 国产三级精品网站| 亚洲精品久久久久久久久久久久久| 亚洲视频在线观看| 欧美一级淫片播放口| 久久视频在线观看免费| 亚洲精品色婷婷福利天堂| 国产福利精品av综合导导航| 在线观看欧美成人| 欧美孕妇毛茸茸xxxx| 亚洲自拍高清视频网站| 欧美成人一二三| 亚洲日本中文字幕| 一区二区三区天堂av| 国产在线视频2019最新视频| 欧美成人精品三级在线观看| 欧美精品videosex牲欧美| 欧美电影免费观看高清完整| 日韩精品福利网站| 亚洲风情亚aⅴ在线发布| 国产精品久久久久久久久久| 欧美精品激情视频| 欧美午夜片欧美片在线观看| 国产精品久久电影观看| www.久久久久久.com| 中文字幕日韩在线视频| 欧美激情videos| 久久久久久久久久久免费| 亚洲男人的天堂在线播放| 日韩有码片在线观看| 国产精品久久久久久久av大片| 色香阁99久久精品久久久| 国产精品69久久久久| 亚洲**2019国产| 17婷婷久久www| 中文.日本.精品| 欧美午夜xxx| 精品国内自产拍在线观看| 国内免费精品永久在线视频| 97精品欧美一区二区三区| 亚洲国产精品久久久久秋霞蜜臀| 日韩精品在线视频美女| 日本韩国欧美精品大片卡二| 久99九色视频在线观看| 欧美日韩国产精品一区| 激情久久av一区av二区av三区| 欧美精品videos性欧美| 亚洲成人精品久久| 亚洲成人中文字幕| 国产精品一区二区久久| 欧美高清电影在线看| 国产欧美一区二区三区四区| 亚洲网站在线看| 欧美寡妇偷汉性猛交| 欧美特级www| 夜夜嗨av一区二区三区免费区| 一道本无吗dⅴd在线播放一区| 中文字幕久久亚洲| 91免费观看网站| 亚洲新声在线观看| 欧美日韩激情小视频| 久久国产加勒比精品无码| 亚洲天堂免费观看| 26uuu另类亚洲欧美日本一| 精品毛片三在线观看| 午夜精品久久久久久99热|