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

首頁 > 編程 > C# > 正文

比較有效的使用C#讀取文件的代碼

2020-01-24 03:48:30
字體:
來源:轉載
供稿:網友
你平時是怎么讀取文件的?使用流讀取。是的沒錯,C#給我們提供了非常強大的類庫(又一次吹捧了.NET一番),里面封裝了幾乎所有我們可以想到的和我們沒有想到的類,流是讀取文件的一般手段,那么你真的會用它讀取文件中的數據了么?真的能讀完全么?

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

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
亚洲免费av网址| 亚洲国产精品99久久| 国产亚洲精品美女久久久久| 一本色道久久88亚洲综合88| 7m精品福利视频导航| 日韩av在线不卡| 国产精品嫩草影院久久久| 大胆欧美人体视频| 亚洲欧美精品中文字幕在线| 91精品国产沙发| 丝袜美腿精品国产二区| 日韩精品高清视频| 日韩一级裸体免费视频| 国产日韩精品一区二区| 粉嫩老牛aⅴ一区二区三区| 中文字幕精品视频| 亚洲第一页中文字幕| 国产精品色悠悠| 亚洲精品一区二区久| 成人在线视频网站| 亚洲美女性视频| 久热精品视频在线观看| 97国产真实伦对白精彩视频8| 91精品视频播放| 国产女同一区二区| 日本精品视频在线观看| 国产亚洲欧洲高清一区| 国产成人精品视| 日韩国产欧美精品一区二区三区| 国产成人亚洲综合91| 日本久久久久久久久| 日韩av一区二区在线观看| 亚洲电影在线观看| 国产精品久久久久久久电影| www.日韩不卡电影av| 国产成人高潮免费观看精品| 日韩中文第一页| 精品亚洲一区二区三区四区五区| 亚洲欧美在线一区二区| 亚洲欧美日本伦理| 亚洲国产精品嫩草影院久久| 欧美超级乱淫片喷水| 性欧美激情精品| 国产精品第10页| 国产精品美女av| 日韩av片电影专区| 久久香蕉精品香蕉| 国产综合在线视频| 日韩电影中文字幕| 国产剧情久久久久久| 国产成人a亚洲精品| 成人做爰www免费看视频网站| 国产精品视频成人| 日韩中文字幕第一页| 久久伊人免费视频| 亚洲91av视频| 国产精品入口福利| 亚洲欧美日韩精品| 国内精品模特av私拍在线观看| 欧洲日本亚洲国产区| 91av在线国产| 亚洲欧美日韩精品久久奇米色影视| 亚洲欧洲美洲在线综合| 久久国产精品视频| 亚洲女人被黑人巨大进入| 正在播放欧美视频| 国产精品第七影院| 中文字幕一精品亚洲无线一区| 国产精品高清在线观看| 欧美日韩国产在线| 91福利视频在线观看| 日韩中文字幕免费视频| 亚洲午夜色婷婷在线| 日韩在线免费av| 国产精品成人va在线观看| 久久成人综合视频| 国产91精品最新在线播放| 国产精品一区二区三| 欧美精品videofree1080p| 中文字幕亚洲欧美日韩高清| 色婷婷久久av| 国产日韩欧美夫妻视频在线观看| 国产一区二区黑人欧美xxxx| 国产精品一区二区三区毛片淫片| 欧美黄网免费在线观看| 国产美女久久精品| 成人免费大片黄在线播放| 欧美激情区在线播放| 欧美日韩国产精品一区二区不卡中文| 国产v综合ⅴ日韩v欧美大片| 国产精品一区二区三区久久| 91理论片午午论夜理片久久| 亚洲天堂一区二区三区| 91禁外国网站| 欧美最猛性xxxxx(亚洲精品)| 欧美极品美女电影一区| 久久九九国产精品怡红院| 亚洲精品国产电影| 另类少妇人与禽zozz0性伦| 国产成人涩涩涩视频在线观看| 亚洲的天堂在线中文字幕| 91产国在线观看动作片喷水| 全亚洲最色的网站在线观看| 色先锋资源久久综合5566| 91在线观看欧美日韩| 操日韩av在线电影| 777精品视频| 亚洲精品久久久一区二区三区| 中文字幕在线看视频国产欧美| 少妇久久久久久| 最新国产精品拍自在线播放| 正在播放亚洲1区| 久久九九精品99国产精品| 国产欧美日韩免费| 26uuu亚洲伊人春色| 亚洲色图激情小说| 91tv亚洲精品香蕉国产一区7ujn| 久热99视频在线观看| 精品久久香蕉国产线看观看亚洲| 这里只有视频精品| 国产精品第100页| 91在线观看免费高清| 亚洲第一在线视频| 日韩精品一二三四区| 国产亚洲欧洲在线| 国产成+人+综合+亚洲欧美丁香花| 久久精品国产欧美亚洲人人爽| 日本久久久久久久| 上原亚衣av一区二区三区| 国产精品夜色7777狼人| 91av在线影院| 最近2019免费中文字幕视频三| 国产一区二区黄| 国产欧美一区二区三区久久人妖| 欧美国产日本高清在线| 国产精品第三页| 中文字幕精品国产| 日韩精品在线观看视频| 国产精品国产自产拍高清av水多| 国产精品亚洲自拍| 久久久久久久久久久亚洲| 日本精品va在线观看| 国产视频久久久| 亚洲精品乱码久久久久久金桔影视| 欧美成人一区在线| 亚洲人成电影网站色xx| 久久久女人电视剧免费播放下载| 久久久午夜视频| 九九热精品在线| 亚洲男人天堂2023| 国产69精品久久久久久| 中文日韩在线视频| 欧亚精品中文字幕| 国产精品jizz在线观看麻豆| 日韩中文字幕第一页| 欧美性猛交xxxx黑人猛交| 欧美大胆在线视频| 91精品久久久久久久| 欧美另类交人妖| 精品欧美一区二区三区| 欧美最顶级的aⅴ艳星| 激情成人中文字幕| 91av视频在线播放| 亚洲一区二区三区视频播放|