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,但是像文件拷贝这种高级功能就没有提供,因此我们先拿文件 ...
随机推荐
- Cap'n Proto, FlatBuffers, and SBE
转自:utm_source=tuicool">http://kentonv.github.io/capnproto/news/2014-06-17-capnproto-flatbuff ...
- 文件存储结构inode与RAM结构建立联系
linux下一切皆文件,大致可分为以下几类:目录.普通文件.硬连接.软连接.字符设备.块设备.FIFO.Socket,其在物理存储体内存储按inode和数据块存储,inode代表元数据,是除实际数据外 ...
- Vsphere日记01.ESXi5.5.install
Vsphere ESXi 5.5 install ESXI 5.5 安装环境需求 1.CPU需求 1.1)Interl CPU 必须支持VT-X技术,且在BIOS中开启.I 系列CPU.exon 系列 ...
- Linux Linux程序练习一
注意:在Linux中,"*"是一个通配符,代表所有字符,所以"*"必须要使用转义字符"\"
- js 把字符串当做方法执行
<SCRIPT LANGUAGE="JavaScript"> function test(str){ alert(str); } eval('test("aa ...
- Photoshop脚本之获得文件夹下所有特定后缀文件
function getAllFiles(folderName,houzhui){ folderName var regthis = new RegExp( '.+\.('+houzhui+')$', ...
- Android开发——初步
一.项目结构介绍
- SlidingMenu官方实例分析7——SlidingContent和SlidingTitleBar区别
包含ActionBar:setSlidingActionBarEnabled(true); 效果图: 不包含ActionBar:setSlidingActionBarEnabled(false); 效 ...
- android-support-v7使用
前言:android-support-v7与v4相对,还是有很大不同的,首先v7中分为的3个JAR包,其次v7中提供的一些布局资源,所以在使用的时候,需要将v7的源码项目导入,作为lib项目来添加到你 ...
- Failed to load the JNI shared library jvm.dl
. 原因1:该目录下jvm.dll不存在 2 解决办法:重新安装jdk或者jre并配置好环境变量.copy一个jvm.dll放在该目录下 3 原因2:eclipse的版本与jdk或者jre版本不一致 ...