国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

用C#設計一個命令行方式的文件分割器

2024-07-21 02:20:27
字體:
來源:轉載
供稿:網友

共享軟件中有很多界面美觀的文件分割程序,將一個大文件分割成幾個較小的文件,分別保存,需要的時候再合并成原來的文件,常常是必備的工具。

本文用微軟的visual studio .net開發(fā)環(huán)境的c#語言也來設計一個文件分割器,并且以dos命令行方式運行,就象使用copy命令一樣簡單。從中也可以了解文件分割的原理以及.net框架對文件的讀寫操作方式。

新建一個visual c#項目,選擇“控制臺應用程序”,項目名稱設置為filesplitcon,系統自動產生了class1.cs文件,將以下的代碼加入到class1.cs的相應區(qū)域中:

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下生成了可執(zhí)行文件,大小只有6.5kb,將這個執(zhí)行程序拷貝到系統可以尋找到的路徑下,例如c:/winnt(windows2000系統),使它成為一個系統命令。

在命令提示符窗口下使用方法如下(假定編譯后的可執(zhí)行文件為filesplitcon.exe):

分割文件:

filesplitcon s 要分割文件的文件名 分割成幾個文件

例如filesplitcon s w2ksp3.exe 4(將w2ksp3.exe分割成4個文件)



合并文件:

filesplitcon m 合并文件名



代碼很簡潔,使用了streamwriter和streamreader對象,循環(huán)以byte字節(jié)的方式讀取文件,第一個參數args[0]=“s”表示執(zhí)行分割文件代碼,args[0]=“m”表示執(zhí)行合并文件代碼。

說明:

分割時,在與分割文件相同目錄下生成各個分割文件,文件名為原來文件名依次加上.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個文件拷貝到任一個目錄下,執(zhí)行命令:

filesplitcon m w2ksp3.exe



注意:如果一個文件不能恰好分割成等分的幾個文件,以上程序的處理是將剩余的字節(jié)寫入新的文件,所以對于以上示例的命令,若w2ksp3.exe不能恰好分成4個文件,那么將會生成5個文件,這樣處理應該更接近于實際情況。



以上程序在windows2000,visual studio .net開發(fā)環(huán)境下通過調試,因為使用了命令行方式,運行速度很快,將一個124m的文件分割為4個文件感覺不到等待的時間。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 镇江市| 麻城市| 扬中市| 新化县| 福州市| 清新县| 彩票| 綦江县| 邢台县| 信丰县| 卫辉市| 安丘市| 平度市| 金乡县| 崇左市| 遂宁市| 大悟县| 巴林左旗| 通化市| 伊宁市| 马山县| 孝义市| 巴中市| 新巴尔虎左旗| 乌鲁木齐市| 泰兴市| 甘肃省| 三河市| 渑池县| 广汉市| 康定县| 泾阳县| 乐亭县| 元氏县| 肃宁县| 久治县| 江门市| 逊克县| 文化| 普宁市| 盘山县|