FileStream,顧名思義,文件流。流,是字節(jié)流。我的理解是,硬盤上存在一個(gè)字節(jié)流,內(nèi)存里也有一個(gè)字節(jié)流,它們是對應(yīng)的。程序運(yùn)行時(shí),我們只能對內(nèi)存里的字節(jié)流直接操作,在它被關(guān)閉的時(shí)候,它的內(nèi)容自動(dòng)寫入硬盤上的相應(yīng)字節(jié)流。
復(fù)制一個(gè)文件的基本思路是:逐一讀取原文件流的字節(jié),逐一寫入新文件流中。分別用到文件流的ReadByte()和WriteByte()方法。這里要注意的是,讀取時(shí)以字節(jié)為單位,一個(gè)字節(jié)如下圖所示
是一個(gè)0和1組合的序列。ReadByte()讀取一個(gè)字節(jié)后將這個(gè)序列求值,返回的是整形數(shù)值。如果讀到文件的盡頭了,不能成功讀取字節(jié)了,返回的是-1。這個(gè)設(shè)計(jì)是非常合理的。因?yàn)橹灰莻€(gè)字節(jié),總是能求出它大于或等于0的值的。沒有字節(jié)了,就返回-1了。這樣的話,可以把-1作為循環(huán)讀取終止的標(biāo)志。
我下面以一個(gè)圖片文件的復(fù)制為例講解。
在C盤新建一個(gè)畫圖文件,另存為png格式,文件名pic1。
然后執(zhí)行以下代碼:
using System; using System.IO; namespace Demo { class Program { public static void Main(string[] args) { FileStream fs1 = new FileStream("c:/pic1.png",FileMode.Open);//FileAccess is dispensable. //FileAccess is the extra contract. FileStream fs2 = new FileStream("c:/pic2.png",FileMode.Create); int d; byte b; while( ( d = fs1.ReadByte() ) != -1 ) { b = (byte)d; fs2.WriteByte( b ); } fs1.Close(); fs2.Close(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。