用C#設計一個命令列方式的檔案分割器

來源:互聯網
上載者:User
本文用微軟的visual studio .net開發環境的C#語言也來設計一個檔案分割器,並且以DOS命令列方式運行,就象使用copy命令一樣簡單。從中也可以瞭解檔案分割的原理以及.net架構對檔案的讀寫操作方式。

建立一個visual c#項目,選擇“控制台應用程式”,項目名稱設定為filesplitcon,系統自動產生了class1.cs檔案,將以下的代碼加入到class1.cs的相應地區中:

using System;

using System.Data;

using System.IO;

namespace filesplitcon

{

/// <summary>

/// Class1 的摘要說明。

/// </summary>

class Class1

{

/// <summary>

/// 應用程式的主進入點。

/// </summary>

[STAThread]

static void Main(string[] args)

{

if(args[0]=="s")

{

int i;

FileStream fr = new FileStream(args[1],FileMode.Open, FileAccess.Read );

int FileSize = Convert.ToInt32(fr.Length) /Convert.ToInt32(args[2]);

StreamWriter fwlist = new StreamWriter(args[1] +"." +"list",false);

for(i=1;i<=Convert.ToInt32(args[2]);i++)

{

byte [] byteread=new byte[FileSize] ;

fr.Read(byteread,0,FileSize);

FileStream fw = new FileStream(args[1] +"." + i ,FileMode.CreateNew, FileAccess.Write);

fwlist.WriteLine(args[1] +"." + i );

foreach(byte bNext in byteread)

fw.WriteByte(bNext) ;

fw.Close();

}

if( fr.Length!=fr.Position )

{

byte [] byteread=new byte[Convert.ToInt32(fr.Length) -FileSize*(i-1)] ;

fr.Read(byteread,0,Convert.ToInt32(fr.Length) -FileSize*(i-1));

FileStream fw = new FileStream(args[1] + "." + i ,FileMode.CreateNew, FileAccess.Write);

fwlist.WriteLine(args[1] +"." + i );

foreach(byte bNext in byteread)

fw.WriteByte(bNext) ;

fw.Close();

}

fr.Close();

fwlist.Flush();

fwlist.Close();

Console.WriteLine("檔案分割結束");

}

if(args[0]=="m")

{

StreamReader frlist=new StreamReader(args[1]+"."+"list");

FileStream fw = new FileStream(args[1] ,FileMode.Append, FileAccess.Write);

string sline;

sline=frlist.ReadLine();

while(sline!=null)

{

FileStream fr = new FileStream(sline,FileMode.Open, FileAccess.Read );

byte [] byteread=new byte[fr.Length] ;

fr.Read(byteread,0,Convert.ToInt32(fr.Length));

foreach(byte bNext in byteread)

fw.WriteByte(bNext) ;

fr.Close();

sline=frlist.ReadLine();

}

frlist.Close();

fw.Close();

Console.WriteLine("檔案合并結束");

}

}

}

}

編譯後,在bin/debug下產生了可執行檔,大小隻有6.5kb,將這個執行程式拷貝到系統可以尋找到的路徑下,例如c:\winnt(windows2000系統),使它成為一個系統命令。

在命令提示字元視窗下使用方法如下(假定編譯後的可執行檔為filesplitcon.exe):

分割檔案:

filesplitcon s 要分割檔案的檔案名稱 分割成幾個檔案

例如filesplitcon s w2ksp3.exe 4(將w2ksp3.exe分割成4個檔案)

合并檔案:

filesplitcon m 合并檔案名稱

代碼很簡潔,使用了streamwriter和streamreader對象,迴圈以byte位元組的方式讀取檔案,第一個參數args[0]=“s”表示執行分割檔案代碼,args[0]=“m”表示執行合并檔案代碼。

說明:

分割時,在與分割檔案相同目錄下產生各個分割檔案,檔案名稱為原來檔案名稱依次加上.1,.2,.3,.....;同時產生一個列表檔案.list,記錄產生的各分割檔案的檔案名稱;

例如對於filesplitcon s w2ksp3.exe 4;產生了

w2ksp3.exe.1

w2ksp3.exe.2

w2ksp3.exe.3

w2ksp3.exe.4

w2ksp3.exe.list

w2ksp3.exe.list檔案的內容是:

w2ksp3.exe.1

w2ksp3.exe.2

w2ksp3.exe.3

w2ksp3.exe.4

合并時,將

w2ksp3.exe.1

w2ksp3.exe.2

w2ksp3.exe.3

w2ksp3.exe.4

w2ksp3.exe.list

5個檔案拷貝到任一個目錄下,執行命令:

filesplitcon m w2ksp3.exe

注意:如果一個檔案不能恰好分割成等分的幾個檔案,以上程式的處理是將剩餘的位元組寫入新的檔案,所以對於以上樣本的命令,若w2ksp3.exe不能恰好分成4個檔案,那麼將會產生5個檔案,這樣處理應該更接近於實際情況。

以上程式在windows2000,visual studio .net開發環境下通過調試,因為使用了命令列方式,運行速度很快,將一個124M的檔案分割為4個檔案感覺不到等待的時間。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.