C#使用FileStream復(fù)制一個(gè)任意文件
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); } } }
會(huì)在c盤下生成一個(gè)和pic1一模一樣的圖片文件pic2.
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:【C#基礎(chǔ)】Substring截取字符串的方法小結(jié)(推薦)
欄 目:C#教程
下一篇:C#使用Json.Net進(jìn)行序列化和反序列化及定制化
本文標(biāo)題:C#使用FileStream復(fù)制一個(gè)任意文件
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/4753.html
您可能感興趣的文章
- 01-10C#使用Dispose模式實(shí)現(xiàn)手動(dòng)對資源的釋放
- 01-10C#3.0使用EventLog類寫Windows事件日志的方法
- 01-10C#使用windows服務(wù)開啟應(yīng)用程序的方法
- 01-10c# ArrayList的使用方法小總結(jié)
- 01-10C#使用ADO.Net部件來訪問Access數(shù)據(jù)庫的方法
- 01-10C#禁止textbox復(fù)制、粘貼、剪切及鼠標(biāo)右鍵的方法
- 01-10C#使用Mutex簡單實(shí)現(xiàn)程序單實(shí)例運(yùn)行的方法
- 01-10使用Nopcommerce為商城添加滿XX減XX優(yōu)惠券功能
- 01-10C#中yield用法使用說明
- 01-10C#編程和Visual Studio使用技巧(下)


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改