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中写入你的目标文件路径,即可!

程序运行如下图。谢谢大家!

posted on 2012-05-03 20:36  北国的秋天  阅读(2565)  评论(7编辑  收藏  举报

导航