C#使用FileStream復(fù)制一個(gè)任意文件
FileStream,顧名思義,文件流。流,是字節(jié)流。我的理解是,硬盤上存在一個(gè)字節(jié)流,內(nèi)存里也有一個(gè)字節(jié)流,它們是對(duì)應(yīng)的。程序運(yùn)行時(shí),我們只能對(duì)內(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.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#中Html.RenderPartial與Html.RenderAction的區(qū)別分析
這篇文章主要介紹了C#中Html.RenderPartial與Html.RenderAction的區(qū)別分析,需要的朋友可以參考下2014-07-07
Unity Shader實(shí)現(xiàn)2D水流效果
這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)2D水流效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
C#編程實(shí)現(xiàn)連接SQL SERVER數(shù)據(jù)庫實(shí)例詳解
這篇文章主要介紹了C#編程實(shí)現(xiàn)連接SQL SERVER數(shù)據(jù)庫的方法,以實(shí)例形式較為詳細(xì)的分析了C#連接SQL SERVER數(shù)據(jù)庫的相關(guān)步驟與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-11-11
Unity實(shí)現(xiàn)顏色漸變滑動(dòng)條
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)顏色漸變滑動(dòng)條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
C#.NET中如何批量插入大量數(shù)據(jù)到數(shù)據(jù)庫中
這篇文章主要給大家介紹C#.net中如何批量插入大量數(shù)據(jù)到數(shù)據(jù)庫中,本文涉及到C#.net中批量插入數(shù)據(jù)到數(shù)據(jù)庫中方面的內(nèi)容,對(duì)C#.net批量插入數(shù)據(jù)到數(shù)據(jù)庫中感興趣的朋友可以參考下本篇文章2015-10-10

