ActiveX控件開發實例(3)


文件拷貝控件

要求:通過文件讀寫創建一個文件拷貝控件,該控件可以拷貝任意類型的文件,調用時宿主程序需要為控件提供源文件和目標文件的路徑,要求在文件拷貝過程中顯示拷貝的進度。

基本思想:從源文件中讀取數據,然后將數據寫到目標文件,從而實現文件的拷貝。但由於要實現對任意類型文件的拷貝,因而需要以字節流的方式從源文件中讀取字節,然后以字節流的方式寫到目標文件中,這樣不管對什么類型的文件都可以進行拷貝。

文件拷貝進度的顯示可用ProgressBar控件來實現。

步驟如下:

(1)在VS.NET 2008中選擇“文件”|“新建”|“項目”命令,在打開的“新建項目”對話框中選擇左邊方框中的“Visual C#”項,在右邊的方框中選擇“Windows窗體控件庫”,創建控件程序MyCopyControl。

(2)參照例8.1的方法,將默認的類名“UserControl1”改為“文件拷貝控件”(這將成為工具箱中要顯示的控件名稱)。

(3)在解決方案資源管理器中雙擊節點“UserControl1.cs”,打開控件的設計界面,適當調整容器對象——UserControl對象的大小,然后在其中添加一個ProgressBar控件,並將其Dock屬性值設置為Fill,使之充滿整個容器。

(4)右擊節點“UserControl1.cs”,在彈出的菜單中選擇“查看代碼”項,打開代碼編輯器,在此為控件添加一個Copy()方法和一個curValue屬性。Copy()方法實現文件拷貝,curValue屬性用於設置進度條的當前位置。

關鍵代碼如下:

        public int curValue   //設置進度條的value屬性值

        {

            set { progressBar1.Value = value; }

        }

        public int Copy(string sourcefilepath, string targetfilepath) //實現文件拷貝的方法
        {  FileStream fsr = null;
            FileStream fsw = null;
            BinaryWriter writer = null;
            BinaryReader reader = null;         
            try
            {  fsr = new FileStream(sourcefilepath, FileMode.Open, FileAccess.Read);
                fsw = new FileStream(targetfilepath, FileMode.OpenOrCreate, FileAccess.Write);
                byte b;   int filelength = (int)fsr.Length;   progressBar1.Minimum = 0;
                progressBar1.Maximum = filelength;
                while (fsr.Position < filelength) //以字節流的方式讀寫文件
                {  b = (byte)fsr.ReadByte();
                    fsw.WriteByte(b);
                    progressBar1.Value = (int)fsr.Position;
                }
                return 1;
            }
            catch (Exception ex) MessageBox.Show(ex.ToString());
            finally
            {  if (reader != null) reader.Close();
                if (fsr != null) fsr.Close();
                if (writer != null) writer.Close();
                if (fsw != null) fsw.Close();
            } 
            return 0;

(5)選擇菜單“生成”|“生成解決方案”命令(或按F6),生成的dll文件即為我們所需的文件拷貝控件。

至此控件完成了。下面來測試該控件。

 

測試控件:

(1)在解決方案資源管理器中添加窗體應用程序testMyCopyControl,並將之設置為啟動項目。在該程序窗體上添加一個剛生成的“文件拷貝控件”、一個Button控件和兩個TextBox控件及Label控件,並設置相應的屬性和適當調整它們的位置和大小:

(2)雙擊【拷貝】,增加如下代碼:

 private void button1_Click(object sender, EventArgs e)
        {
            int result = fileCopy1.copy(textBox1.Text, textBox2.Text);
            if (result == 1)
            {
                MessageBox.Show("拷貝成功");
            }
            else
            {
                MessageBox.Show("拷貝失敗");
            }
        }

(3)雙擊【選擇】,用於選擇文件,完了之后再Textbox2中寫入你的目標文件路徑,即可!

程序運行如下圖。謝謝大家!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM