[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# 简单通信(一对多) 新增文件传输进度

刚开始没太搞清楚文件的分块传输,以至于在文件传输进度的地方,找了很久的资料都没弄出来。 服务端增加文件传输进度,客户没有变化。 using System; using System.Coll...

C# 简单通信(实现文件传输)

之前写过一个简单通信传输,不过只有聊天的功能,现在实现了文件传输的功能,借鉴于网上一篇博客,不过他写的仅仅是客户端对于服务器发送文件,我稍微优化了这个功能,实现了,端与端之间信息的互发和文件的互发,感...

C#Socket 文件传输,支持断点续传

最近做一个程序需要传送文件,在网上找了好久也没找到好用的方案,于是自己写了一个,与大家分享,希望大家帮忙改进,拍砖欢迎~ 文件采取分块发送,每块单独校验,能够保证文件的完整性.同时还提供磁盘缓存功能...

C#网络编程(五、Socket异步传输字符串)

转自:http://blog.csdn.net/shanyongxu/article/details/51191709,本人学习受益匪浅,楼主把重点都标记出来了,请点击链接查看原文,尊重楼主大大版权 ...

C#网络编程(六、Socket文件传输)

转自:http://blog.csdn.net/shanyongxu/article/details/51204110,本人学习受益匪浅,楼主把重点都标记出来了,请点击链接查看原文,尊重楼主大大版权。...

【VS开发】千兆以太网的传输速度

千兆以太网主流标准 千兆以太网络技术早在上世纪90年代末就已成熟,其中,1995年国际标准化组织TIA/EIA颁布了1000Base-TX标准,该标准的目的是把双绞线用于千兆以太网中,其目的是在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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