好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

用backgroudworker实现大文件复制(备份).doc

4页
  • 卖家[上传人]:小**
  • 文档编号:57167264
  • 上传时间:2018-10-19
  • 文档格式:DOC
  • 文档大小:66.50KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 用用 BackgroudWorker 实现大文件复制实现大文件复制(备份备份)这是我在一个项目做的一个视频文件备份功能,这里用 BackgroudWorker 实现大文件复制. 下面我主要的代码共享出来:private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e){if (backgroundWorker.CancellationPending){e.Cancel = true;e.Result = -1;return;}else{long totalSize = 0;List infoList = dgv_MediaList.DataSource as List;foreach (MediaInfo info in infoList){totalSize += info.FileSize;}foreach (MediaInfo info in infoList){e.Result = CopyFile(info.FullPath, Path.Combine(txt_BackupDir.Text, info.FileName), totalSize);}}}private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e){this.progress4Backup.Value = e.ProgressPercentage;}private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){btn_PauseBackup.Enabled = false;btn_StartBackup.Enabled = true;if (e.Result.ToString() == “-1“)MessageBox.Show(“备份中断!“);elseMessageBox.Show(“备份完成!“);}private void btn_PauseBackup_Click(object sender, EventArgs e){btn_PauseBackup.Enabled = false;btn_StartBackup.Enabled = true;backgroundWorker.CancelAsync();}private int CopyFile(string fromFile, string toFile, long totalLength){//创建一个文件流指向源文件FileStream fsRead = new FileStream(fromFile, FileMode.Open);//创建一个文件流指向目标文件FileStream fsWrite = new FileStream(toFile, FileMode.Create);//记录一下该文件的长度long fileLength = fsRead.Length;//定义一个1M的缓冲区byte[] buffer = new byte[1024 * 1024];//先读取一次,并且将读取到的真正内容长度记录下来int readLength = fsRead.Read(buffer, 0, buffer.Length);//用来记录已经将多少内容写入到了文件中long readCount = 0;//只要读取到的内容不为0就接着读while (readLength != 0){if (backgroundWorker.CancellationPending){fsRead.Close();fsWrite.Close();buffer = null;return -1;}//将前面已经读取到内存中的数据写入到文件中fsWrite.Write(buffer, 0, readLength);//已经读取的数量累加readCount += readLength;//计算已经读取的数据百分比int percentage = (int)(readCount * 100 / totalLength);backgroundWorker.ReportProgress(percentage);//进行下一次读取readLength = fsRead.Read(buffer, 0, buffer.Length);}fsRead.Close();fsWrite.Close();//清空缓冲区buffer = null;return 1;}。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.