[C#] 复制文件并计算传输速度

原创 2012年03月31日 13:21:21

原理:

      在复制文件之前读取一个系统时间, 复制完之后再读取系统时间, 然后计算 时间间隔, 用文件的大小除以时间得到传输速度

使用方法:

      创建一个大于2G的文件,将其命名为"1.zip", 并将其与测试工具放在同一个文件夹里,然后运行程序.

      在下拉列表框里选择盘符后, 点击 开始 按钮, 等3-4分钟, 就可以得到结果.(参考下面的结果图.)

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;


namespace SpeedTestTool
{
    
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            lblPrompt.Text = "";
            //获得系统盘符,并将其显示在combobox里, 以供选择
            DriveInfo[] allDrivers = DriveInfo.GetDrives();
            foreach(DriveInfo d in allDrivers)
            {
                cmbPartition.Items.Add(d.Name);
            }
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            string surPath, desPath,ts,ts_h,ts_m,ts_s,strPartition;
            double t,speed;
            DateTime dt1, dt2;

            btnStart.Enabled = false;
          
            if (cmbPartition.SelectedIndex== -1)
            {
                //如果没有选择盘符, 则给出错误信息
                MessageBox.Show("Please Select Target Partition firstly!","Error Message",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
            else
            {               
                strPartition = cmbPartition.SelectedItem.ToString();//获得选择的系统盘符
                //MessageBox.Show(strPartition);

                //定义源文件的路径
                surPath = Directory.GetCurrentDirectory() + "\\1.zip";
                //MessageBox.Show(surPath);

                //定义目标文件夹的路径
                desPath = strPartition + "test"; 
                //MessageBox.Show(desPath);

                //判断目标文件夹是否存在,如果不存在,就创建目标文件夹
                if (!Directory.Exists(desPath))
                {
                    try
                    {
                        Directory.CreateDirectory(desPath);
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show(error.Message);
                    }
                }

                //判断目标文件是否存大,如果存在,就删除.
                if (File.Exists(desPath + "\\1.zip"))
                {
                    try
                    {
                        File.Delete(desPath + "\\1.zip");
                    }
                    catch(Exception error)
                    {
                        MessageBox.Show(error.Message);
                    }
                }


                try
                {
                    //开始复制文件之前,获得系统当前时间,将在txtBeginTime里显示出来.
                    dt1 = DateTime.Now;
                    txtBeginTime.Text = dt1.ToLongTimeString();

                    //复制文件
                    File.Copy(surPath, desPath + "\\1.zip");
                   
                    //复制文件成功后,获得系统当前时间,将在txtEndTime里显示出来.
                    dt2 = DateTime.Now;
                    txtEndTime.Text = dt2.ToLongTimeString();

                    //计算间隔时间,并在txtInterval中显示出来
                    ts = (dt2 - dt1).ToString();
                    string[] strs = ts.Split(':');
                    ts_h = strs[0];
                    ts_m = strs[1];
                    ts_s = strs[2];
                    t = Convert.ToDouble(ts_s) + Convert.ToDouble(ts_m) * 60 + Convert.ToDouble(ts_h) * 3600;
                    txtInterval.Text = (Convert.ToInt32(t)).ToString() + " s";

                    //得到文件的大小, 并在txtFileSize中显示出来
                    FileInfo fi = new FileInfo(desPath + "\\1.zip");
                    txtFileSize.Text = ((fi.Length) / (1024 * 1024)).ToString()+ " MB";

                    //计算速度并显示在txtSpeed中.
                    speed = ((fi.Length) / (1024 * 1024)) / t;
                    txtSpeed.Text = (Convert.ToInt32(speed)).ToString()+" MB/s";

                    //没完成的时候,给出提示
                    lblPrompt.ForeColor = Color.Green;
                    lblPrompt.Text = "Complete!";

                    //让start按钮可以用
                    btnStart.Enabled = true;

                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message,"Error Message",MessageBoxButtons.OK,MessageBoxIcon.Error);
                }               
                
            }
            
            
        }
    }
}

运行程序如下图:


计算结果后如下图:

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

c#-Winform实时显示上传下载速率

c#-Winform实时显示上传下载速率

C# File.Copy 工作记录

工作设计特定文件夹内文件导出到按照规律新建文件夹下 查找到关于Copy的两个方法 第一个:将现有文件复制到新文件。 不允许覆盖同名的文件。 获取要保存的路径,如果没有,建立该路径下文件夹。 然后...

实时下载速度的计算:

所谓的实时下载速度也是按秒计算的,直接每秒计算一下当前下载量与上次记录的下载量便可得到从 上一秒到这一秒的下载数据量,这样实时下载速度就得出来了,至于剩余时间,可以将当前下载的数 据量与耗用的秒为单位...
  • earbao
  • earbao
  • 2013年09月29日 12:22
  • 6061

Winform控件之文本类控件

对于一个应用程序而言,控件是搭建用户界面的积木。它们具备交互式的特征。VS 2012中的控件都放在工具箱中,添加一个控件到窗体,只需在工具箱中选择好要添加的控件,并按住鼠标左键,拖动到窗体上即可。向窗...

菜鸟初探ActiveMQ

最近在项目中接触了同步平台这么个东西,后来一直想着问问他们,后来想想自己什么也不知道,就去问人家,也不合适,于是决定自己先了解一下,那么就先把我这几天的感受给大家讲一下。       什么事MQ   ...

MSN和QQ文件传输速度解析

发现很多情况下,msn传输文件比qq要慢,倒不是说msn没有快的时候,但是大部分的时候是真的比QQ慢,连我这种神经比较大条的人都注意到了,google了一下,早就有人做了解答,基本上就是说msn传输文...

局域网文件传输速度相当快

  • 2009年01月05日 08:52
  • 497KB
  • 下载

XFastUsb 提升USB传输速度

  • 2016年08月15日 13:58
  • 1.14MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[C#] 复制文件并计算传输速度
举报原因:
原因补充:

(最多只允许输入30个字)