C# 学习黑马.Net视频教程,大文件拷贝
设计器代码:
- namespace 大文件拷贝
- {
- partial class Form1
- {
- /// <summary>
- /// 必需的设计器变量。
- /// </summary>
- private System.ComponentModel.IContainer components = null;
- /// <summary>
- /// 清理所有正在使用的资源。
- /// </summary>
- /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
- #region Windows 窗体设计器生成的代码
- /// <summary>
- /// 设计器支持所需的方法 - 不要
- /// 使用代码编辑器修改此方法的内容。
- /// </summary>
- private void InitializeComponent()
- {
- this.textBox1 = new System.Windows.Forms.TextBox();
- this.textBox2 = new System.Windows.Forms.TextBox();
- this.button1 = new System.Windows.Forms.Button();
- this.button2 = new System.Windows.Forms.Button();
- this.button3 = new System.Windows.Forms.Button();
- this.button4 = new System.Windows.Forms.Button();
- this.progressBar1 = new System.Windows.Forms.ProgressBar();
- this.label1 = new System.Windows.Forms.Label();
- this.label2 = new System.Windows.Forms.Label();
- this.SuspendLayout();
- //
- // textBox1
- //
- this.textBox1.Location = new System.Drawing.Point(, );
- this.textBox1.Name = "textBox1";
- this.textBox1.Size = new System.Drawing.Size(, );
- this.textBox1.TabIndex = ;
- //
- // textBox2
- //
- this.textBox2.Location = new System.Drawing.Point(, );
- this.textBox2.Name = "textBox2";
- this.textBox2.Size = new System.Drawing.Size(, );
- this.textBox2.TabIndex = ;
- //
- // button1
- //
- this.button1.Location = new System.Drawing.Point(, );
- this.button1.Name = "button1";
- this.button1.Size = new System.Drawing.Size(, );
- this.button1.TabIndex = ;
- this.button1.Text = "源文件";
- this.button1.UseVisualStyleBackColor = true;
- this.button1.Click += new System.EventHandler(this.button1_Click);
- //
- // button2
- //
- this.button2.Location = new System.Drawing.Point(, );
- this.button2.Name = "button2";
- this.button2.Size = new System.Drawing.Size(, );
- this.button2.TabIndex = ;
- this.button2.Text = "保存到";
- this.button2.UseVisualStyleBackColor = true;
- this.button2.Click += new System.EventHandler(this.button2_Click);
- //
- // button3
- //
- this.button3.Location = new System.Drawing.Point(, );
- this.button3.Name = "button3";
- this.button3.Size = new System.Drawing.Size(, );
- this.button3.TabIndex = ;
- this.button3.Text = "1个1个字节拷贝";
- this.button3.UseVisualStyleBackColor = true;
- this.button3.Click += new System.EventHandler(this.button3_Click);
- //
- // button4
- //
- this.button4.Location = new System.Drawing.Point(, );
- this.button4.Name = "button4";
- this.button4.Size = new System.Drawing.Size(, );
- this.button4.TabIndex = ;
- this.button4.Text = "大文件拷贝";
- this.button4.UseVisualStyleBackColor = true;
- this.button4.Click += new System.EventHandler(this.button4_Click);
- //
- // progressBar1
- //
- this.progressBar1.Location = new System.Drawing.Point(, );
- this.progressBar1.Name = "progressBar1";
- this.progressBar1.Size = new System.Drawing.Size(, );
- this.progressBar1.Step = ;
- this.progressBar1.TabIndex = ;
- //
- // label1
- //
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(, );
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(, );
- this.label1.TabIndex = ;
- this.label1.Text = "0%";
- //
- // label2
- //
- this.label2.AutoSize = true;
- this.label2.Location = new System.Drawing.Point(, );
- this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(, );
- this.label2.TabIndex = ;
- this.label2.Text = "0k/s";
- //
- // Form1
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(, );
- this.Controls.Add(this.label2);
- this.Controls.Add(this.label1);
- this.Controls.Add(this.progressBar1);
- this.Controls.Add(this.button4);
- this.Controls.Add(this.button3);
- this.Controls.Add(this.button2);
- this.Controls.Add(this.button1);
- this.Controls.Add(this.textBox2);
- this.Controls.Add(this.textBox1);
- this.Name = "Form1";
- this.Text = "Form1";
- this.ResumeLayout(false);
- this.PerformLayout();
- }
- #endregion
- private System.Windows.Forms.TextBox textBox1;
- private System.Windows.Forms.TextBox textBox2;
- private System.Windows.Forms.Button button1;
- private System.Windows.Forms.Button button2;
- private System.Windows.Forms.Button button3;
- private System.Windows.Forms.Button button4;
- private System.Windows.Forms.ProgressBar progressBar1;
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.Label label2;
- }
- }
代码:
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- //*************************************************************************************
- //**********************黑马程序员/Asp.Net/技术群:118041544 **************************
- //*************************************************************************************
- namespace 大文件拷贝
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private string _fileName;
- private void button1_Click(object sender, EventArgs e)
- {
- OpenFileDialog ofd = new OpenFileDialog();
- if (ofd.ShowDialog() == DialogResult.OK)
- {
- this.textBox1.Text = ofd.FileName;
- _fileName = ofd.SafeFileName;
- }
- }
- private void button2_Click(object sender, EventArgs e)
- {
- FolderBrowserDialog fbd = new FolderBrowserDialog();
- if (fbd.ShowDialog() == DialogResult.OK)
- {
- this.textBox2.Text = fbd.SelectedPath;
- }
- }
- private void button3_Click(object sender, EventArgs e)
- {
- this.progressBar1.Value = ;
- this.label1.Text = "0%";
- if (!File.Exists(this.textBox1.Text))
- {
- MessageBox.Show("找不到目标文件!");
- return;
- }
- if (!Directory.Exists(this.textBox2.Text))
- {
- MessageBox.Show("请选择有效的保存路径!");
- return;
- }
- string fileRead = this.textBox1.Text;
- string fileSave = this.textBox2.Text + "/" + _fileName;
- System.Threading.ThreadPool.QueueUserWorkItem((o) =>
- {
- using (IDisposable file = new FileStream(fileRead, FileMode.Open, FileAccess.Read),
- fileWrite = new FileStream(fileSave, FileMode.Create, FileAccess.Write))
- {
- int count = ;
- long fileLength = ((FileStream)file).Length; //目标文件大小
- double n = ( * 1.0 / fileLength); //每次进度条累加
- double m = ; //累加统计
- int spam = ; //时间间隔
- double speed = ; //拷贝速度
- do
- {
- DateTime time = DateTime.Now;
- count = ((FileStream)file).ReadByte();
- ((FileStream)fileWrite).WriteByte((byte)count);//按一个字节一个字节写入
- //计算速度 单位k/s
- speed = (1.0 * / ) / spam;
- //进度条
- m = m + n;
- //控件显示
- ShowProbar(o, m, speed);
- //保存时间间隔,单位毫秒
- spam = (DateTime.Now - time).Milliseconds > ? (DateTime.Now - time).Milliseconds : spam;//必须大于0
- } while (count != -);
- }
- if (this.progressBar1.Value == )
- {
- System.Threading.Thread.Sleep(); //延迟1秒弹出
- MessageBox.Show("拷贝成功!");
- }
- });
- }
- private void button4_Click(object sender, EventArgs e)
- {
- this.progressBar1.Value = ;
- this.label1.Text = "0%";
- if (!File.Exists(this.textBox1.Text))
- {
- MessageBox.Show("找不到目标文件!");
- return;
- }
- if (!Directory.Exists(this.textBox2.Text))
- {
- MessageBox.Show("请选择有效的保存路径!");
- return;
- }
- string fileRead = this.textBox1.Text;
- string fileSave = Path.Combine(this.textBox2.Text, _fileName);
- System.Threading.ThreadPool.QueueUserWorkItem((o) =>
- {
- using (IDisposable file = new FileStream(fileRead, FileMode.Open, FileAccess.Read),
- fileWrite = new FileStream(fileSave, FileMode.Create, FileAccess.Write))
- {
- int count = ;
- long fileLength =((FileStream)file).Length; //目标文件大小
- //根据目标文件大小创建byte数组长度
- byte[] data = new byte[fileLength > * * ? * * : fileLength]; //30M 1024 * 1024 * 30
- int step = (int)Math.Ceiling(fileLength * 1.0 / data.Length); //分流段数
- double n = ( * 1.0 / step); //每次进度条累加
- double m = ; //累加统计
- int spam = ; //时间间隔
- double speed = ; //拷贝速度
- do
- {
- DateTime time = DateTime.Now;
- //文件流操作
- count = ((FileStream)file).Read(data, , data.Length);
- ((FileStream)fileWrite).Write(data, , count);
- //保存时间间隔,单位毫秒
- spam = (DateTime.Now - time).Milliseconds > ? (DateTime.Now - time).Milliseconds : spam;//必须大于0
- //计算速度 单位k/s
- if (count == data.Length)
- {
- speed = (count * 1.0 / / spam) * ;
- }
- //进度条
- m = m + n;
- //控件显示
- ShowProbar(o, m, speed);
- } while (count > );
- }
- if (this.progressBar1.Value == )
- {
- System.Threading.Thread.Sleep(); //延迟1秒弹出
- MessageBox.Show("拷贝成功!");
- }
- });
- }
- private void ShowProbar(object o, double m, double speed)
- {
- try
- {
- int barValue = (int)Math.Floor(m) >= ? : (int)Math.Floor(m);
- this.Invoke((MethodInvoker)(() =>
- {
- this.progressBar1.Value = barValue;
- this.label1.Text = barValue.ToString() + "%";
- this.label2.Text = speed >= ? (speed / ).ToString("0.0m/s") : (speed >= ? speed.ToString("0k/s") : (speed * ).ToString("0b/s"));
- }));
- }
- catch (Exception e)
- {
- throw new Exception(e.Message);
- }
- }
- }
- }
C# 学习黑马.Net视频教程,大文件拷贝的更多相关文章
- C# IO操作(四)大文件拷贝(文件流的使用)、文件编码
大文件拷贝(文件流的使用).文件编码 首先说一下大文件拷贝和文件流,因为计算机的内存资源是有限的,面对几个G甚至更大的文件,需要通过程序来完成拷贝,就需要用到文件流(因为我们无法做到把文件一 ...
- nodejs pipe实现大文件拷贝
原文: http://nqdeng.github.io/7-days-nodejs/ --------------------------------------------------------- ...
- ios开发网络学习四:NSURLConnection大文件断点下载
#import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...
- JAVA-IO流大文件拷贝
package com.test.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...
- IO流大文件拷贝
String resourcesPath="f:/a.grd"; String targetPath=" ...
- 大文件拆分问题的java实践(附源码)
引子 大文件拆分问题涉及到io处理.并发编程.生产者/消费者模式的理解,是一个很好的综合应用场景,为此,花点时间做一些实践,对相关的知识做一次梳理和集成,总结一些共性的处理方案和思路,以供后续工作中借 ...
- nodejs 文件拷贝
小文件拷贝 我们使用NodeJS内置的fs模块简单实现这个程序如下. var fs = require('fs'); function copy(src, dst) { fs.writeFileSyn ...
- 大文件拆分方案的java实践(附源码)
引子 大文件拆分问题涉及到io处理.并发编程.生产者/消费者模式的理解,是一个很好的综合应用场景,为此,花点时间做一些实践,对相关的知识做一次梳理和集成,总结一些共性的处理方案和思路,以供后续工作中借 ...
- node实现文件拷贝2
https://www.cnblogs.com/coding4/p/7495968.html 文件拷贝NodeJS 提供了基本的文件操作 API,但是像文件拷贝这种高级功能就没有提供,因此我们先拿文件 ...
随机推荐
- SQL数据库查询练习题(更正版)
一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...
- Matlab命令行版打开
matlab -nosplash -nodesktop 运行文件:matlab -nodesktop -nosplash -r file
- 第一百七十九节,jQuery-UI,知问前端--按钮 UI-图标
jQuery-UI,知问前端--按钮 UI 学习要点: 1.使用 button 按钮 2.修改 button 样式 3.button()方法的属性 4.button('action', param) ...
- Eclipse 编译项目
Eclipse 编译项目 编译 Java 项目 一个项目可以关联多个编译器. java 项目关联的是 java 编译器.可以通过以下方式来查看项目关联的编译器: 在 Package Explorer ...
- Eclipse 运行配置(Run Configuration)
Eclipse 运行配置(Run Configuration) 创建和使用 Eclipse 运行配置 在运行配置(Run Configuration)对话框中可以创建多个运行配置.每个配置可以在应用中 ...
- hdu 1956(混合图的欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1956 思路:先将无向边定向,比如1<->3,可以定它的方向为1->3,1的出度++, ...
- 关于swift 单元测试的补充
最近小弟在自己学习研究swift , 习惯于写一边写单元测试一边写逻辑的我来说,在xcode环境没有单元测试,写起来就是有个不是实在的感觉. 至于怎么创建单元测试.怎么写,不是这个文章的主题,因为看了 ...
- 强大的find命令
find命令确实很强大,自己懒得计,转载一篇: 原文出处:http://roclinux.cn/?p=18 1. 想查看当前文件夹及子文件夹里有没有文件名为“abc”的文件 # find . -nam ...
- iOS-毛玻璃、navigationBar滑动颜色渐变
1.毛玻璃实现 iOS8以上,官方提供了系统方法实现毛玻璃,代码如下: // iOS8 UIVisualEffectView UIImageView *bgView = [[UIImageView a ...
- SQL Server 服务无法启动,错误1069解决办法
刚刚接到公司服务器上的SQL Server服务无法启动的问题需要解决,在进入“SQL Server 配置管理器”启动MSSQLServer 服务时,启动过程异常缓慢预示着“异常”的存在.果然,系统给出 ...