8.在【解決方案資源管理器】窗口中,雙擊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 ;
9.在From1.cs的class代碼區添加下列代碼,下列代碼是定義一個字符串全局變量,用以存放合並文件所在目錄:
public string sDirectoryName = "" ;
//定義一個全局變量,用以存放合並文件所在的目錄
10.用下列代碼替換Form1.cs中的button2的Click事件對應的處理代碼,下列代碼功能是根據文件選擇對話框獲得文件所在的目錄,為後面的文件合並做准備:
private void button2_Click ( object sender , System.EventArgs e )
{
openFileDialog1.Title ="請選擇要合並的第一個文件" ;
System.Windows.Forms.DialogResult drTemp = openFileDialog1.ShowDialog ( ) ;
if ( drTemp == DialogResult.OK && openFileDialog1.FileName != "" )
{
textBox1.Text = openFileDialog1.FileName ;
}
string[ ] path = openFileDialog1.FileName .Split ( @"\".ToCharArray ( ) ) ;
string sTemp = "" ;
int i= 0 ;
for ( i= 0 ; i < path.Length - 1 ; i++ )
{
sTemp = sTemp + path[ i ] + @"\" ;
}
button1.Enabled = true ;
sDirectoryName= sTemp ;
//獲得文件所在目錄
}
11.用下列代碼替換Form1.cs中的button1的Click事件對應的處理代碼,下列代碼功能是合並獲得的文件所在目錄裡面的所有文件,並生成合並文件:
private void button1_Click ( object sender , System.EventArgs e )
{
string[ ] arrFileNames = Directory.GetFiles ( sDirectoryName ) ;
//獲取存放分割後小文件所在目錄所在的所有小文件
int iSumFile = arrFileNames.Length ;
progressBar1.Maximum = iSumFile ;
FileStream AddStream = new FileStream ( textBox2.Text , FileMode.OpenOrCreate ) ;
//以合並後的文件名稱和打開方式來創建、初始化FileStream文件流
BinaryWriter AddWriter = new BinaryWriter ( AddStream ) ;
//以FileStream文件流來初始化BinaryWriter書寫器,此用以合並分割的文件
/*循環合並小文件,並生成合並文件 */
for ( int i = 0 ; i < iSumFile ; i++ )
{
FileStream TempStream = new FileStream ( arrFileNames[ i ] , FileMode.Open ) ;
//以小文件所對應的文件名稱和打開模式來初始化FileStream文件流,起讀取分割作用
BinaryReader TempReader = new BinaryReader ( TempStream ) ;
//用FileStream文件流來初始化BinaryReader文件閱讀器,也起讀取分割文件作用
AddWriter.Write ( TempReader.ReadBytes ( ( int ) TempStream.Length ) ) ;
//讀取分割文件中的數據,並生成合並後文件
TempReader.Close ( ) ;
//關閉BinaryReader文件閱讀器
TempStream.Close ( ) ;
//關閉FileStream文件流
progressBar1.Value = i + 1 ;
//顯示合並進程
}
AddWriter.Close ( ) ;
//關閉BinaryWriter文件書寫器
AddStream.Close ( ) ;
//關閉FileStream文件流
MessageBox.Show ( "成功合並!" ) ;
progressBar1.Value = 0 ;
}
12.至此在上述步驟都正確完成後,【合並程序】項目的全部工作就基本完成了。此時單擊快捷鍵F5運行程序,單擊【…】按鈕選擇分割後文件所在目錄的任一文件,再輸入合並後文件的名稱後,單擊【執行】按鈕,則程序就能夠把合並選擇目錄中的所有文件,並查殺輸入的合並文件。圖06是【合並程序】項目的運行界面:
圖06:【合並程序】項目的運行界面
五.總結:
Visual C#之所以擁有很強的文件處理能力是因為在.Net FrameWork SDK中提供了許多處理文件的類。實現分割大文件程序和合並小文件程序應該是文件編程中比較復雜的應用了,但通過本文的介紹,可見主要使用的是FileStream、BinaryReader和BinaryWriter三個類就基本完成了,並且代碼量也不是很多。其實掌握Visual C#對文件的處理,這三個類是關鍵,也是重點和難點,因為其他處理文件的類要麼和這三個類的用法相似,要麼結構簡單,容易掌握。最後希望本文能夠對您掌握Visual C#,精通Visual C#的文件編程有所幫助。