多线程实现Copy

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 using System.IO;
10 using System.Threading;
11 namespace ThreadCopy
12 {
13     public partial class Form1 : Form
14     {
15         public Form1()
16         {
17             InitializeComponent();
18             CheckForIllegalCrossThreadCalls = false;
19         }
20 
21         private void bt_Click(object sender, EventArgs e)
22         {
23             Thread thread = new Thread(this.CopyFile);
24             thread.Start();
25 
26         }
27         private void CopyFile()
28         {
29             FileStream readstream = null;
30             FileStream writestream = null;
31             //源文件Textbox sf,目标文件Textbox mf
32             //源文件sfile,目标文件mfile
33             string sfile = this.sf.Text.Trim();
34             string mfile = this.mf.Text.Trim();
35             if(!File.Exists(sfile))
36             {
37                 MessageBox.Show("源文件不存在");
38                 return;
39             }
40             readstream = File.Open(sfile,FileMode.Open);
41             if (File.Exists(mfile))
42             {
43                 DialogResult dr = MessageBox.Show("是否要覆盖文件?", "警告", MessageBoxButtons.OKCancel);
44                 if (dr == DialogResult.OK)
45                 {
46                     writestream = File.Open(mfile, FileMode.Truncate);
47 
48                 }
49                 else
50                 {
51                     return;
52                 }
53             }
54             else
55             {
56                 writestream = File.Open(mfile,FileMode.Create);
57 
58             }
59             byte[] bt = new byte[1024];
60             int i = 0;
61             long count = readstream.Length;
62             int r = 0;
63             string str = "";
64             while((i = readstream.Read(bt,0,bt.Length))!=0)
65             {
66                 writestream.Write(bt,0,i);
67                 r = r + i;
68                 str = ((double)r / count * 100).ToString("0.0") + "%";
69         //prola lable.Name用来显示复制的百分比
70                 this.prola.Text = str;
71         //coula lable.Name用来显示文件的大小
72                 this.coula.Text = count.ToString();
73         //proba lable.Name用来显示复制的进程
74                 this.probr.Maximum = (int)count;
75                 this.probr.Value = r;
76                 if(r == count)
77                 {
78                     this.probr.Value = 0;
79                 }
80 
81             }
82             
83         }
84     }
85 }

 

转载于:https://www.cnblogs.com/zhouxy/archive/2012/07/31/2617292.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值