C#使用FileStream復制一個任意文件
FileStream,顧名思義,文件流。流,是字節(jié)流。我的理解是,硬盤上存在一個字節(jié)流,內存里也有一個字節(jié)流,它們是對應的。程序運行時,我們只能對內存里的字節(jié)流直接操作,在它被關閉的時候,它的內容自動寫入硬盤上的相應字節(jié)流。
復制一個文件的基本思路是:逐一讀取原文件流的字節(jié),逐一寫入新文件流中。分別用到文件流的ReadByte()和WriteByte()方法。這里要注意的是,讀取時以字節(jié)為單位,一個字節(jié)如下圖所示

是一個0和1組合的序列。ReadByte()讀取一個字節(jié)后將這個序列求值,返回的是整形數值。如果讀到文件的盡頭了,不能成功讀取字節(jié)了,返回的是-1。這個設計是非常合理的。因為只要是個字節(jié),總是能求出它大于或等于0的值的。沒有字節(jié)了,就返回-1了。這樣的話,可以把-1作為循環(huán)讀取終止的標志。
我下面以一個圖片文件的復制為例講解。
在C盤新建一個畫圖文件,另存為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);
}
}
}
會在c盤下生成一個和pic1一模一樣的圖片文件pic2.
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C# Dynamic關鍵字之:dynamic為什么比反射快的詳解
本篇文章是對C#中dynamic為什么比反射快進行了詳細的分析介紹,需要的朋友參考下2013-05-05
C#中BitmapImage與BitmapSource接口的區(qū)別對比小結
BitmapImage和BitmapSource都可以用于表示和顯示圖像,本文就來介紹一下C#中BitmapImage與BitmapSource接口的區(qū)別對比,具有一定的參考價值,感興趣的可以了解一下2024-03-03

