• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > c#根据文件大小显示文件复制进度条实例

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#日期比较大小,c#获取文件大小,c#获取屏幕大小,c#比较时间大小,c#字符串比较大小等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

初学者,照着书上的抄袭制作,但已经理解了里面的意思和应用,并且进行了稍微改善和异常捕捉。这里记录下,以防以后用到这方面的知识点。

窗体设计:

code:

namespace CopyProgress015
{
public partial class Form1 : Form
{
    public Form1()
    {
 InitializeComponent();
    }
    private Thread thdCopyFile; //创建一个线程
    private string str = "";  //用来记录源文件的名字
    FileStream FormerOpenStream;  //实例化源文件FileStream类
    FileStream ToFileOpenStream;  //实例化目标文件FileStream类


    #region //复制文件 函数
    /// <summary>
    /// 复制文件
    /// </summary>
    /// <param name="FormerFile">源文件路径</param>
    /// <param name="ToFile">目的文件路径</param>
    /// <param name="TranSize">传输大小</param>
    /// <param name="progressBar1">ProgressBar控件</param>
    public void CopyFile(string FormerFile, string ToFile, int TranSize, ProgressBar progressBar1)
    {
 progressBar1.Value = 0;//设置进度条的当前位置为0
 progressBar1.Minimum = 0; //设置进度条的最小值为0

 try
 {
     FormerOpenStream = new FileStream(FormerFile, FileMode.Open, FileAccess.Read);//以只读方式打开源文件
 }
 catch (IOException ex)
 {
     MessageBox.Show(ex.Message);
     return;
 }

 try
 {
     FileStream fileToCreate = new FileStream(ToFile, FileMode.Create); //创建目的文件,如果已存在将被覆盖
     fileToCreate.Close();//关闭所有fileToCreate的资源
     fileToCreate.Dispose();//释放所有fileToCreate的资源
 }
 catch(IOException ex)
 {
     MessageBox.Show(ex.Message);
     return;
 }


       ToFileOpenStream = new FileStream(ToFile, FileMode.Append, FileAccess.Write);//以写方式打开目的文件


       int max = Convert.ToInt32(Math.Ceiling((Double)FormerOpenStream.Length / (Double)TranSize));//根据一次传输的大小,计算最大传输个数. Math.Ceiling 方法 (Double),返回大于或等于指定的双精度浮点数的最小整数值。

 progressBar1.Maximum = max;//设置进度条的最大值
 int FileSize; //每次要拷贝的文件的大小
 if (TranSize < FormerOpenStream.Length)  //如果分段拷贝,即每次拷贝内容小于文件总长度
 {
     byte[] buffer = new byte[TranSize]; //根据传输的大小,定义一个字节数组,用来存储传输的字节
     int copied = 0;//记录传输的大小
     int tem_n = 1;//设置进度栏中进度的增加个数
     while (copied <= ((int)FormerOpenStream.Length - TranSize))
     {
  FileSize = FormerOpenStream.Read(buffer, 0, TranSize);//从0开始读到buffer字节数组中,每次最大读TranSize
  FormerOpenStream.Flush();   //清空缓存
  ToFileOpenStream.Write(buffer, 0, TranSize); //向目的文件写入字节
  ToFileOpenStream.Flush();//清空缓存
  ToFileOpenStream.Position = FormerOpenStream.Position; //是源文件的目的文件流的位置相同
  copied += FileSize; //记录已经拷贝的大小
  progressBar1.Value = progressBar1.Value + tem_n; //增加进度栏的进度块
     }
     int leftSize = (int)FormerOpenStream.Length - copied; //获取剩余文件的大小
     FileSize = FormerOpenStream.Read(buffer, 0, leftSize); //读取剩余的字节
     FormerOpenStream.Flush();
     ToFileOpenStream.Write(buffer, 0, leftSize); //写入剩余的部分
     ToFileOpenStream.Flush();
 }
 else //如果整体拷贝,即每次拷贝内容大于文件总长度
 {
     byte[] buffer = new byte[FormerOpenStream.Length];
     FormerOpenStream.Read(buffer, 0, (int)FormerOpenStream.Length);
     FormerOpenStream.Flush();
     ToFileOpenStream.Write(buffer, 0, (int)FormerOpenStream.Length);
     ToFileOpenStream.Flush();

 }
 FormerOpenStream.Close();
 ToFileOpenStream.Close();
 if (MessageBox.Show("copy finished") == DialogResult.OK)
 {
     progressBar1.Value = 0;
     txtOriginalFile.Clear();
     txtCopyFile.Clear();
     str = "";

 }

    }

    #endregion

 

    public delegate void CopyFile_Delegate(); //定义委托/托管线程
    /// <summary>
    /// 在线程上执行委托(设置托管线程函数)
    /// </summary>
    public void SetCopyFile()
    {
 //this.Invoke(new CopyFile_Delegate(RunCopyFile)); //对指定的线程进行托管
 //下面两行代码等同上面一行代码
 CopyFile_Delegate copyfile_delegate = new CopyFile_Delegate(RunCopyFile); //创建delegate对象
 this.Invoke(copyfile_delegate); //调用delegate           
    }


    /// <summary>
    /// 设置线程,运行copy文件,它与代理CopyFile_Delegate应具有相同的参数和返回类型
    /// </summary>
    public void RunCopyFile()
    {
 CopyFile(txtOriginalFile.Text, txtCopyFile.Text + "\\" + str, 1024, progressBar1); //复制文件
 Thread.Sleep(0); //避免假死
 thdCopyFile.Abort();  //关闭线程

    }


    private void btnOriginalFile_Click(object sender, EventArgs e)
    {
 if (openFileDialog1.ShowDialog() == DialogResult.OK)  //打开文件对话框
 {
     txtOriginalFile.Text = openFileDialog1.FileName;  //获取源文件的路径
 }

    }

    private void btnCopyFile_Click(object sender, EventArgs e)
    {
 if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
 {
     txtCopyFile.Text = folderBrowserDialog1.SelectedPath;//获取目的文件的路径              
 }
    }


    private void btnBeginToCopy_Click(object sender, EventArgs e)
    {                   

 if (txtOriginalFile.Text.Trim() == string.Empty)
 {
     MessageBox.Show("OriginalFile cannot be

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • c#根据文件大小显示文件复制进度条实例
  • C#日期格式化的几个要点小结

相关文章

  • 2017-05-28C#对多个集合和数组的操作方法(合并,去重,判断)
  • 2017-05-28C#实现Windows Form调用R进行绘图与显示的方法
  • 2017-05-28C#数组排序的两种常用方法
  • 2017-05-28datatable去掉重复行的方法
  • 2017-05-28c#中文转unicode字符示例分享
  • 2017-05-28C#文件后缀名的详细介绍
  • 2017-05-28提示出现unresolved external symbol _main的解决方法
  • 2017-05-28C#使用shell32获取文件属性的方法
  • 2017-05-28C#基础之泛型委托实例教程
  • 2017-05-28c# 数据类型占用的字节数介绍

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#类概念介绍
    • C# KeyUp事件中MessageBox的回车(Enter)键回调问题解决方案
    • C#快速排序算法实例分析
    • C#中进程的挂起与恢复
    • 不安装excel使用c#创建excel文件
    • 配置C#的系统环境变量的方法
    • C# 未处理的“System.InvalidOperationException”类型的异常
    • c#文件下载示例的4种方法分享
    • c# 委托和事件实例学习
    • C# Winform 禁止用户调整ListView的列宽

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有