c#根据文件大小显示文件复制进度条实例

  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.Threading.Tasks;
  9 using System.Windows.Forms;
 10 using System.IO;
 11 using System.Threading;
 12  namespace CopyProgress015
 13 {
 14 public partial class Form1 : Form
 15 {
 16     public Form1()
 17     {
 18  InitializeComponent();
 19     }
 20     private Thread thdCopyFile; //创建一个线程
 21     private string str = "";  //用来记录源文件的名字
 22     FileStream FormerOpenStream;  //实例化源文件FileStream类
 23     FileStream ToFileOpenStream;  //实例化目标文件FileStream类
 24
 25     #region //复制文件 函数
 26     /// <summary>
 27     /// 复制文件
 28     /// </summary>
 29     /// <param name="FormerFile">源文件路径</param>
 30     /// <param name="ToFile">目的文件路径</param>
 31     /// <param name="TranSize">传输大小</param>
 32     /// <param name="progressBar1">ProgressBar控件</param>
 33     public void CopyFile(string FormerFile, string ToFile, int TranSize, ProgressBar progressBar1)
 34     {
 35  progressBar1.Value = 0;//设置进度条的当前位置为0
 36  progressBar1.Minimum = 0; //设置进度条的最小值为0
 37   try
 38  {
 39      FormerOpenStream = new FileStream(FormerFile, FileMode.Open, FileAccess.Read);//以只读方式打开源文件
 40  }
 41  catch (IOException ex)
 42  {
 43      MessageBox.Show(ex.Message);
 44      return;
 45  }
 46   try
 47  {
 48      FileStream fileToCreate = new FileStream(ToFile, FileMode.Create); //创建目的文件,如果已存在将被覆盖
 49      fileToCreate.Close();//关闭所有fileToCreate的资源
 50      fileToCreate.Dispose();//释放所有fileToCreate的资源
 51  }
 52  catch(IOException ex)
 53  {
 54      MessageBox.Show(ex.Message);
 55      return;
 56  }
 57
 58        ToFileOpenStream = new FileStream(ToFile, FileMode.Append, FileAccess.Write);//以写方式打开目的文件
 59
 60        int max = Convert.ToInt32(Math.Ceiling((Double)FormerOpenStream.Length / (Double)TranSize));//根据一次传输的大小,计算最大传输个数. Math.Ceiling 方法 (Double),返回大于或等于指定的双精度浮点数的最小整数值。
 61   progressBar1.Maximum = max;//设置进度条的最大值
 62  int FileSize; //每次要拷贝的文件的大小
 63  if (TranSize < FormerOpenStream.Length)  //如果分段拷贝,即每次拷贝内容小于文件总长度
 64  {
 65      byte[] buffer = new byte[TranSize]; //根据传输的大小,定义一个字节数组,用来存储传输的字节
 66      int copied = 0;//记录传输的大小
 67      int tem_n = 1;//设置进度栏中进度的增加个数
 68      while (copied <= ((int)FormerOpenStream.Length - TranSize))
 69      {
 70   FileSize = FormerOpenStream.Read(buffer, 0, TranSize);//从0开始读到buffer字节数组中,每次最大读TranSize
 71   FormerOpenStream.Flush();   //清空缓存
 72   ToFileOpenStream.Write(buffer, 0, TranSize); //向目的文件写入字节
 73   ToFileOpenStream.Flush();//清空缓存
 74   ToFileOpenStream.Position = FormerOpenStream.Position; //是源文件的目的文件流的位置相同
 75   copied += FileSize; //记录已经拷贝的大小
 76   progressBar1.Value = progressBar1.Value + tem_n; //增加进度栏的进度块
 77      }
 78      int leftSize = (int)FormerOpenStream.Length - copied; //获取剩余文件的大小
 79      FileSize = FormerOpenStream.Read(buffer, 0, leftSize); //读取剩余的字节
 80      FormerOpenStream.Flush();
 81      ToFileOpenStream.Write(buffer, 0, leftSize); //写入剩余的部分
 82      ToFileOpenStream.Flush();
 83  }
 84  else //如果整体拷贝,即每次拷贝内容大于文件总长度
 85  {
 86      byte[] buffer = new byte[FormerOpenStream.Length];
 87      FormerOpenStream.Read(buffer, 0, (int)FormerOpenStream.Length);
 88      FormerOpenStream.Flush();
 89      ToFileOpenStream.Write(buffer, 0, (int)FormerOpenStream.Length);
 90      ToFileOpenStream.Flush();
 91   }
 92  FormerOpenStream.Close();
 93  ToFileOpenStream.Close();
 94  if (MessageBox.Show("copy finished") == DialogResult.OK)
 95  {
 96      progressBar1.Value = 0;
 97      txtOriginalFile.Clear();
 98      txtCopyFile.Clear();
 99      str = "";
100   }
101      }
102      #endregion
103
104      public delegate void CopyFile_Delegate(); //定义委托/托管线程
105     /// <summary>
106     /// 在线程上执行委托(设置托管线程函数)
107     /// </summary>
108     public void SetCopyFile()
109     {
110  //this.Invoke(new CopyFile_Delegate(RunCopyFile)); //对指定的线程进行托管
111  //下面两行代码等同上面一行代码
112  CopyFile_Delegate copyfile_delegate = new CopyFile_Delegate(RunCopyFile); //创建delegate对象
113  this.Invoke(copyfile_delegate); //调用delegate
114     }
115
116     /// <summary>
117     /// 设置线程,运行copy文件,它与代理CopyFile_Delegate应具有相同的参数和返回类型
118     /// </summary>
119     public void RunCopyFile()
120     {
121  CopyFile(txtOriginalFile.Text, txtCopyFile.Text + "\\" + str, 1024, progressBar1); //复制文件
122  Thread.Sleep(0); //避免假死
123  thdCopyFile.Abort();  //关闭线程
124      }
125
126     private void btnOriginalFile_Click(object sender, EventArgs e)
127     {
128  if (openFileDialog1.ShowDialog() == DialogResult.OK)  //打开文件对话框
129  {
130      txtOriginalFile.Text = openFileDialog1.FileName;  //获取源文件的路径
131  }
132      }
133      private void btnCopyFile_Click(object sender, EventArgs e)
134     {
135  if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
136  {
137      txtCopyFile.Text = folderBrowserDialog1.SelectedPath;//获取目的文件的路径
138  }
139     }
140
141     private void btnBeginToCopy_Click(object sender, EventArgs e)
142     {
143
144  if (txtOriginalFile.Text.Trim() == string.Empty)
145  {
146      MessageBox.Show("OriginalFile cannot be empty!");
147      return;
148
149  }
150  else
151  {
152      str = txtOriginalFile.Text;//记录源文件的路径
153      str = str.Substring(str.LastIndexOf(‘\\‘) + 1, str.Length - str.LastIndexOf(‘\\‘) - 1); //获取源文件的名称
154  }
155
156  if (txtCopyFile.Text.Trim() == string.Empty)
157  {
158      MessageBox.Show("The Copyfile path cannot be empty!");
159      return;
160  }
161  else
162  {
163      thdCopyFile = new Thread(new ThreadStart(SetCopyFile));
164      thdCopyFile.Start();
165  }
166
167     }
168
169     /// <summary>
170     /// 给textbox增加tooltip
171     /// </summary>
172     /// <param name="sender"></param>
173     /// <param name="e"></param>
174     private void txtOriginalFile_MouseHover(object sender, EventArgs e)
175     {
176  ToolTip tooltip = new ToolTip();
177  if (txtOriginalFile.Text.Trim() != string.Empty)
178  {
179
180      tooltip.Show(txtOriginalFile.Text, txtOriginalFile);
181  }
182  else
183  {
184      tooltip.Hide(txtOriginalFile);
185  }
186
187     }
188     /// <summary>
189     /// 给textbox增加tooltip
190     /// </summary>
191     /// <param name="sender"></param>
192     /// <param name="e"></param>
193     private void txtCopyFile_MouseHover(object sender, EventArgs e)
194     {
195  ToolTip tooltip = new ToolTip();
196  if (txtCopyFile.Text.Trim() != string.Empty)
197  {
198
199      tooltip.Show(txtCopyFile.Text, txtCopyFile);
200  }
201  else
202  {
203      tooltip.Hide(txtCopyFile);
204  }
205      }
206  }
207 }
208  

复制文件显示进度条

时间: 2024-10-13 13:34:57

c#根据文件大小显示文件复制进度条实例的相关文章

Ajax+PHP实现的进度条--实例

之前重点学习PHP,所以javascript.Ajax都比较弱一点.现在也开始补课了,今天实现了一个进度条的例子,感觉Ajax实现动态页面真的很厉害,并没有想象中的那么难理解. 进度条作为反应实时传输数据进度的状态,能够灵活运用还是很重要的. 在进度条实现中,我们只需要实时修改进度条style中的width属性就可以反应传输数据的情况.当然width的值直接与 proportion=已传输的数据量/总数据量 挂钩.而proportion就是服务器返回给客户端的一个比例值,计算过程可以在服务器端完

asp.net web大文件上传带进度条实例代码

using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.Ht

Flex 4.6 下载进度条 IPreLoaderDisplay生命周期

Flex4.6 程序的主类实际上为SystemManager的子类.SystemManager会创建Preloader对象,然后调用PreLoader对象的initialize方法,该方法有如下签名  public function initialize(showDisplay:Boolean,                                 displayClassName:Class,                                backgroundColo

html5中的progress兼容ie,制作进度条样式

html5新增的progress标签用处很大,它可以制作进度条,不用像以前那样用css来制作进度条! 一.progress使用方法 progress标签很好使用,他有两个属性,value和max,value表示当前进度而max表示总进度(一般可以用100) 1 <progress value="50" max="100"></progress> 二.progress如何兼容ie浏览器 用过progress标签的肯定知道,这个标签虽然好用但是不

iOS:进度条控件的详细使用

进度条控件:UIProcessView:UIView 功能:顾名思义,用来显示下载进度或者传输数据进度. 属性: @property(nonatomic) UIProgressViewStyle progressViewStyle; //风格类型 @property(nonatomic) float progress;                                   //当前进度 @property(nonatomic, retain) UIColor* progressTi

Python的time库和文本进度条 大发彩_票平台搭建

大发彩_票平台搭建 地址一:[hubawl.com]狐霸源码论坛地址二:[bbscherry.com] 是Python中处理时间的标准库1.time库包括三类函数 时间获取:time() ctime() gmtime()时间格式化:strftime() strptime()程序计时:sleep(), perf_counter()2.时间获取 3.时间格式化 4.程序计时 5.进度条实例 #textProBarV1.pyimport timescale = 50print("执行开始".

QT5 进度条传文件

void myDialog::on_pushButton_5_clicked() { QProgressDialog dialog(tr("文件复制进度"), tr("取消"), 0 ,50000, this); dialog.setWindowTitle(tr("文件复制进度条")); dialog.setWindowModified(Qt::WindowModal); dialog.show(); for(int i = 0; i <

python预课02 time模块,文本进度条示例,数字类型操作,字符串操作

time模块 概述:time库是Python中处理时间的标准库,包含以下三类函数 时间获取: time(), ctime(), gmtime() 时间格式化: strftime(), strptime() 程序计时: sleep(), perf_counter() 时间获取: import time print(time.time()) #获取当前时间戳,即计算机内部时间值,浮点型 print('-------') print(time.ctime()) #获取当前时间并以易读方式表示,返回字符

HTML5 CSS3 诱人的实例 : 网页加载进度条的实现,下载进度条等

今天给大家带来一个比较炫的进度条,进度条在一耗时操作上给用户一个比较好的体验,不会让用户觉得在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务,网页加载等:如果有使用html5为手机布局的,也可以用于手机中~ 效果图: 1.html结构: <div id="loadBar01" class="loadBar"> <div> <span class="percent&qu