
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 }