六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

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

[摘要]共享軟件中有很多界面美觀的文件分割程序,將一個大文件分割成幾個較小的文件,分別保存,需要的時候再合并成原來的文件,常常是必備的工具。 本文用微軟的visual studio .net開發(fā)環(huán)境...
     共享軟件中有很多界面美觀的文件分割程序,將一個大文件分割成幾個較小的文件,分別保存,需要的時候再合并成原來的文件,常常是必備的工具。

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

     新建一個visual c#項目,選擇“控制臺應用程序”,項目名稱設置為filesplitcon,系統(tǒng)自動產(chǎn)生了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í)行程序拷貝到系統(tǒng)可以尋找到的路徑下,例如c:\winnt(windows2000系統(tǒng)),使它成為一個系統(tǒng)命令。

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

分割文件:

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

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



合并文件:

filesplitcon m 合并文件名



代碼很簡潔,使用了streamwriter和streamreader對象,循環(huán)以byte字節(jié)的方式讀取文件,第一個參數(shù)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文件的內(nèi)容是:

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)境下通過調(diào)試,因為使用了命令行方式,運行速度很快,將一個124M的文件分割為4個文件感覺不到等待的時間。


主站蜘蛛池模板: 五月一区二区久久综合天堂 | 特级做a爰片毛片免费看一区 | 日韩经典在线 | 亚洲三级影视 | 婷婷六月久久综合丁香一二 | 日本三级韩国三级欧美三级 | 欧美一区二区三区激情啪啪 | 天天躁夜夜躁狠狠躁躁 | 欧美视频一区在线 | 四虎永久免费地址在线网站 | 亚洲 欧美 综合 | 亚洲人成网站在线观看播放 | 综合久久久久综合体桃花网 | 视频午夜 | 亚洲一区二区在线播放 | 五月天丁香婷婷网 | 天天天综合 | 中国xxxx色视频在线观看 | 日本aa网站 | 日韩精品网| 青青青草视频在线观看 | 青娱乐在线国产 | 亚洲欧美综合在线观看 | 青草久操| 伊人动漫 在线播放 | 亚洲破处视频 | 亚洲www网站 | 日韩欧美网址 | 欧美小视频在线观看 | 三级中文有码中文字幕 | 亚洲成a人v欧美综合天堂麻豆 | 泰剧不期而爱第三季免费全集观看 | 日本高清在线观看视频 | 亚洲欧美日韩中字综合 | 羞羞爱爱 | 午夜看毛片 | 四虎免费影院在线播放 | 日本a视频 | 五月花激情网 | 日本一区二区三区中文字幕视频 | 青青草原免费在线观看 |