科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual C#实现文件分割合并器

Visual C#实现文件分割合并器

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文的主要内容就是探讨一下Visual C#在对文件编程中的一个比较流行的应用--文件分割器和合并器

作者:马金虎 来源:天极网 2007年11月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
三.Visual C#实现分割文件的解决方法及其具体实现步骤:

  分割文件其实思路比较简单,首先要确定要分割成小文件的大小,然后确定大文件以此大小分割后的文件数目,并确定小文件的名称,最后通过创建的BinaryReader实例从大文件以确定的小文件大小读取数据,并通过创建BinaryWriter实例向创建的小文件中写入数据,循环此操作,最终实现把大文件分割成的多个小文件。其具体的实现方法请参考下面实现步骤中的第十步。以下就是Visual C#实现分割大文件程序的具体实现步骤:

  1. 启动Visual Studio .Net。

  2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3. 将【项目类型】设置为【Visual C#项目】。

  4. 将【模板】设置为【Windows应用程序】。

  5. 在【名称】文本框中输入【文件分割】。

  6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在"E:\VS.NET项目"目录中就产生了名称为"文件分割"的文件夹,并在里面创建了名称为"文件分割"的项目文件。具体如图01所示:


图01:【文件分割】项目之【新建项目】对话框

  7. 把Visual Studio .Net的当前窗口切换到【Form1.cs(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的操作:

  一个OpenFileDialog组件,用于选择要分割的大文件。

  一个ProgressBar组件,用以显示文件分割的进度。

  一个ComboBox组件,用以选择文件分割的大小。

  二个TextBox组件,分别用以显示OpenFileDialog组件选择后的文件和输入分割后小文件存放的目录。

  四个Label组件。

  二个Button组件,分别用以选择要分割的大文件和对选定文件进行分割,并在这二个Button组件拖入Form1的设计窗体后,双击它们,则系统会在Form1.cs文件分别产生这二个组件的Click事件对应的处理代码。

  8. 把Visual Studio .Net的当前窗口切换到【Form1.cs(设计)】窗口,并按照表05所示数值来调整组件的主要属性:

组件类型 组件名称 属性 设置结果
Button button1 FlatStyle Flat
button1 Text 执行
button2 FlatStyle Popup
button2 Text ...
Form Form1 Text 文件分割
Form1 MaximizeBox False
Form1 MinimizeBox True
Form1 FormBorderStyle FormBorderStyle.FixedSingle
ComboBox comboBox1 Items 720
comboBox1 Items 1440
comboBox1 Items 2880
Label label1 Text 请选择大小:
label2 Text 请选择文件:
label3 Text 输入存放目录:
label4 Text (单位:K)
TextBox TextBox1 Text  
  TextBox2 Text  
       表05:【文件分割】项目中组件主要属性设定数值表

  至此【文件分割】项目的界面设计和功能实现的准备工作就完成了,设计后的界面如图02所示:


图02:【文件分割】项目的设计后的界面

  9. 在【解决方案资源管理器】窗口中,双击Form1.cs文件,进入Form1.cs文件的编辑界面。并在Form1.cs文件的开头,用下列导入命名空间代码替代系统缺省的导入命名空间代码。

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.IO ;
using System.Text ;
using System.Data.OleDb ;
using System.Windows.Forms.Design ;

  10. 用下列代码替换Form1.cs中的button2的Click事件对应的处理代码,下列代码功能是选定要分割的大文件:

private void button2_Click ( object sender , System.EventArgs e )
{
 openFileDialog1.Title = "请选择要分割的文件名称" ;
 DialogResult drTemp = openFileDialog1.ShowDialog ( ) ;
 if ( drTemp == DialogResult.OK && openFileDialog1.FileName != string.Empty )
 {
  textBox1.Text = openFileDialog1.FileName ;
  button1.Enabled = true ;
 }
}

  11. 用下列代码替换Form1.cs中的button1的Click事件对应的处理代码,下列代码功能是按照选择的文件大小,把选定的文件按照此大小进行分割,并把分割后的文件存放到指定目录中:

private void button1_Click ( object sender , System.EventArgs e )
{
 int iFileSize= Int32.Parse ( comboBox1.Text ) *1024 ;
 //根据选择来设定分割的小文件的大小
 if ( Directory.Exists ( textBox2.Text ) )
  Directory.Delete ( textBox2.Text ,true ) ;
  //如果计算机存在存放分割文件的目录,则全部删除此目录所有文件
 else
  Directory.CreateDirectory ( textBox2.Text ) ;
  //反之则在计算机创建目录
  FileStream SplitFileStream=new FileStream ( textBox1.Text , FileMode.Open ) ;
  //以文件的全路对应的字符串和文件打开模式来初始化FileStream文件流实例
  BinaryReader SplitFileReader=new BinaryReader ( SplitFileStream ) ;
  //以FileStream文件流来初始化BinaryReader文件阅读器
  byte [ ] TempBytes ;
  //每次分割读取的最大数据
  int iFileCount = ( int ) ( SplitFileStream.Length / iFileSize ) ;
  //小文件总数
  progressBar1.Maximum = iFileCount ;
  if ( SplitFileStream.Length % iFileSize != 0 ) iFileCount++ ;
  string [ ] TempExtra = textBox1.Text.Split ( ’.’ ) ;
  /* 循环将大文件分割成多个小文件 */
  for ( int i = 1 ; i <= iFileCount ; i++ )
  {
   string sTempFileName = textBox2.Text + @"\"+i.ToString ( ) .PadLeft ( 4 ,’0’ ) + "." + TempExtra[ TempExtra.Length - 1 ] ; //小文件名
   //确定小文件的文件名称
   FileStream TempStream = new FileStream ( sTempFileName , FileMode.OpenOrCreate ) ;
   //根据文件名称和文件打开模式来初始化FileStream文件流实例
   BinaryWriter TempWriter = new BinaryWriter ( TempStream ) ;
   //以FileStream实例来创建、初始化BinaryWriter书写器实例
   TempBytes = SplitFileReader.ReadBytes ( iFileSize ) ;
   //从大文件中读取指定大小数据
   TempWriter.Write ( TempBytes ) ;
   //把此数据写入小文件
   TempWriter.Close ( ) ;
   //关闭书写器,形成小文件
   TempStream.Close ( ) ;
   //关闭文件流
   progressBar1.Value = i - 1 ;
  }
  SplitFileReader.Close ( ) ;
  //关闭大文件阅读器
  SplitFileStream.Close ( ) ;
  MessageBox.Show ( "分割成功!" ) ;
  progressBar1.Value = 0 ;
}

  12. 至此在上述步骤都正确完成后,【文件分割】项目的全部工作就基本完成了。此时单击快捷键F5运行程序,单击【…】按钮选择要分割的文件,输入分割文件存放的目录,并确定分割文件的大小后,单击【执行】按钮,则程序就能够把选定的文件按照选定的大小进行分割,并把分割成的文件存放输入的目录中。图03是【文件分割】项目的运行界面:


图03:【文件分割】项目的运行界面

  Visual C#实现分割文件程序已经全部完成了,下面就来介绍Visual C#把用分割程序分割成的小文件进行合并的解决思路和具体的实现步骤。
    • 评论
    • 分享微博
    • 分享邮件
    闂傚倸鍊搁崐椋庢閿熺姴鐭楅幖娣妼缁愭鏌¢崶鈺佷汗闁哄閰i弻鏇$疀鐎n亞浠炬繝娈垮灠閵堟悂寮婚弴锛勭杸閻庯綆浜栭崑鎾诲冀椤撱劎绋忛梺璺ㄥ櫐閹凤拷

    濠电姷鏁告慨鐑姐€傛禒瀣劦妞ゆ巻鍋撻柛鐔锋健閸┾偓妞ゆ巻鍋撶紓宥咃躬楠炲啫螣鐠囪尙绐為梺褰掑亰閸撴盯鎮惧ú顏呪拺闂傚牊鍗曢崼銉ョ柧婵犲﹤瀚崣蹇旂節婵犲倻澧涢柛瀣ㄥ妽閵囧嫰寮介妸褋鈧帡鏌熼挊澶婃殻闁哄瞼鍠栭幃婊堝煛閸屾稓褰嬮柣搴ゎ潐濞叉ê鐣濈粙璺ㄦ殾闁割偅娲栭悡娑㈡煕鐏炲墽鐭嬫繛鍫熸倐濮婄粯鎷呯粵瀣異闂佹悶鍔嬮崡鍐茬暦閵忋倕鍐€妞ゆ劑鍎卞皬闂備焦瀵х粙鎴犫偓姘煎弮瀹曚即宕卞Ο闀愮盎闂侀潧鐗嗛幊搴㈡叏椤掆偓閳规垿鍩ラ崱妞剧凹濠电姰鍨洪敋閾荤偞淇婇妶鍛櫤闁稿鍊圭换娑㈠幢濡纰嶉柣搴㈣壘椤︾敻寮诲鍫闂佸憡鎸鹃崰搴敋閿濆鏁嗗〒姘功閻绻涢幘鏉戠劰闁稿鎹囬弻锝呪槈濞嗘劕纾抽梺鍝勬湰缁嬫垿鍩為幋锕€宸濇い鏇炴噺閳诲﹦绱撻崒娆戝妽妞ゃ劌鎳橀幆宀勫磼閻愰潧绁﹂柟鍏肩暘閸斿矂鎮為崹顐犱簻闁圭儤鍨甸鈺呮倵濮橆剦妲归柕鍥у瀵粙濡歌閸c儳绱撴担绛嬪殭婵☆偅绻堝濠氭偄绾拌鲸鏅i悷婊冪Ч閹﹢鎳犻鍌滐紲闁哄鐗勯崝搴g不閻愮儤鐓涢悘鐐跺Г閸犳﹢鏌℃担鐟板鐎规洜鍠栭、姗€鎮╅搹顐ら拻闂傚倷娴囧畷鍨叏閹惰姤鈷旂€广儱顦崹鍌炴煢濡尨绱氶柨婵嗩槸缁€瀣亜閺嶃劎鈽夋繛鍫熺矒濮婅櫣娑甸崨顔俱€愬銈庡亝濞茬喖宕洪埀顒併亜閹哄棗浜鹃梺鎸庢穿婵″洤危閹版澘绫嶉柛顐g箘椤撴椽姊虹紒妯哄鐎殿噮鍓欒灃闁告侗鍠氶崢鎼佹⒑閸撴彃浜介柛瀣閹﹢鏁冮崒娑氬幈闁诲函缍嗛崑鍡樻櫠椤掑倻纾奸柛灞剧☉缁椦囨煙閻熸澘顏柟鐓庢贡閹叉挳宕熼棃娑欐珡闂傚倸鍊风粈渚€骞栭銈傚亾濮樺崬鍘寸€规洖缍婇弻鍡楊吋閸涱垽绱遍柣搴$畭閸庨亶藝娴兼潙纾跨€广儱顦伴悡鏇㈡煛閸ャ儱濡煎褜鍨伴湁闁绘ǹ绉鍫熺畳闂備焦瀵х换鍌毼涘Δ鍛厺闁哄洢鍨洪悡鍐喐濠婂牆绀堟慨妯挎硾閽冪喖鏌曟繛褍瀚烽崑銊╂⒑缂佹ê濮囨い鏇ㄥ弮閸┿垽寮撮姀鈥斥偓鐢告煥濠靛棗鈧懓鈻嶉崶銊d簻闊洦绋愰幉楣冩煛鐏炵偓绀嬬€规洟浜堕、姗€鎮㈡總澶夌处

    重磅专题
    往期文章
    最新文章