大文件分割复制,每次复制100M 也可以复制别的较大数值。

小于1G的小文件就直接复制得了。代码里没写 ,但是很简单 直接写进去就好了,难得是分割复制 所以没写. 好吧 我还是改了 改成小文件也可以复制了,全面一点是不

效果图【图片里的总文件大小 忘记除1024了。  文章里的代码改了,图片和源代码文件改了  】

代码写得不是很好.请多多指教

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; namespace FileStrem大文件分割复制
{
public partial class Form1 : Form
{
private int WriterByetNub = ;//100M复制速度
//源目标
private FileStream FileToRead;
//复制到文件
private FileStream FileToWrite;
//保存文件的地址
private string SaveFile_Add;
//源文件的名字
private string File_Add;
//设置正常写入字节
private Byte[] byteToWrite;
//设置剩余写入字节
private Byte[] byteToLastWrite;
//循环次数
private long WriteTimes;
//循环后的剩余字节
private int L_Size; public Form1()
{
InitializeComponent();
}
//设置委托
private delegate void OpenFile(); private void Cpy()
{
try
{
label_Add.Text = "源地址"; label_Cpy_Add.Text = "复制到"; label_Cpy_Lc.Text = "复制进程:"; label_Write.Text = "已经写入"; label_FileSize.Text = "源文件总大小";
//文件选取
OpenFileDialog openfileDialog = new OpenFileDialog();
//show文件选取器
openfileDialog.ShowDialog(); File_Add = openfileDialog.FileName; label_Add.Text += ":" + File_Add; //保存地址选取
FolderBrowserDialog savefileDialog = new FolderBrowserDialog(); savefileDialog.ShowDialog(); SaveFile_Add = savefileDialog.SelectedPath; label_Cpy_Add.Text += ":" + SaveFile_Add + File_Add; FileToRead = new FileStream(File_Add, FileMode.Open, FileAccess.Read); FileToWrite = new FileStream(@SaveFile_Add + "\\" + openfileDialog.SafeFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); label_FileSize.Text = "源文件总大小"+(FileToRead.Length/).ToString()+"KB";
if (FileToRead.Length > WriterByetNub)
//设置写入字节数组
{
byteToWrite = new byte[WriterByetNub];
//循环次数
WriteTimes = FileToRead.Length / WriterByetNub;
//多次循环后剩余字节
L_Size = Convert.ToInt32(FileToRead.Length % WriterByetNub);
//多次循环后字节数组
byteToLastWrite = new byte[L_Size]; for (long i = ; i <= WriteTimes; i++)
{
//读源文件
FileToRead.Read(byteToWrite, , WriterByetNub); //写数据到目标文件
FileToWrite.Write(byteToWrite, , WriterByetNub); //设置进度条的值
progressBar.Value = Convert.ToInt32(i * / WriteTimes); Application.DoEvents(); //设置Lable上的进度值
label_Cpy_Lc.Text = "复制进程:" + Convert.ToInt32((i * ) / WriteTimes).ToString() + "%"; //设置写入值
label_Write.Text = "已写入" + (FileToRead.Position / ).ToString() + "KB";
} //剩余字节的读和写
if (L_Size != )
{
FileToRead.Read(byteToLastWrite, , L_Size); FileToWrite.Write(byteToLastWrite, , L_Size);
}
}
else //当写于分割的字节大小时 直接复制吧
{
//设置进度条的最大值
progressBar.Maximum =(int) FileToRead.Length;
//设置字节
byteToWrite = new byte[FileToRead.Length];
//读取到字节中
FileToRead.Read(byteToWrite, , (int)FileToRead.Length);
//计算进程
label_Cpy_Lc.Text = "复制进程:" + Convert.ToInt32(FileToRead.Position/FileToRead.Length*).ToString() + "%"; //设置写入值
label_Write.Text = "已写入" + (FileToRead.Position / ).ToString() + "KB";
//计算进度条的进度
progressBar.Value =(int )FileToRead.Position;
//写入完成
FileToWrite.Write(byteToWrite, , (int)FileToRead.Length);
}
FileToRead.Flush(); FileToWrite.Flush(); FileToRead.Close(); FileToWrite.Close(); MessageBox.Show("复制完成");
}
catch(Exception ex) {
FileToRead.Flush(); FileToWrite.Flush(); FileToRead.Close(); FileToWrite.Close(); MessageBox.Show(ex.ToString()); }
} private void openFileBtn_Click(object sender, EventArgs e)
{
OpenFile getFile = new OpenFile(Cpy);
this.Invoke(getFile);
}
}
}

源代码https://pan.baidu.com/s/1dE2RMRf

c# 大文件分割 复制 Filestream 进度条的更多相关文章

  1. FileStrem大文件分割复制

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. Asp.net mvc 大文件上传 断点续传 进度条

    概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这篇文章,此方法确实很不错,能够稳定的上传大文件,http: ...

  3. php实现大文件上传带进度条

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

  4. BootStrap Progressbar 实现大文件上传的进度条

    1.首先实现大文件上传,如果是几兆或者几十兆的文件就用基本的上传方式就可以了,但是如果是大文件上传的话最好是用分片上传的方式.我这里主要是使用在客户端进行分片读取到服务器段,然后保存,到了服务器段读取 ...

  5. atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

    atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7 1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传 ...

  6. c#大文件分割过程

    需求: 在项目开发中,我们会遇到单个文件大小超过1TB的文件,这样的文件只能进行单文件读取,往往会造成读取完成耗时过长,导致客户在使用体验过程中不满意. 为了解决提升大文件的解析速度,我想到了先分割大 ...

  7. WPF下载远程文件,并显示进度条和百分比

    WPF下载远程文件,并显示进度条和百分比 1.xaml <ProgressBar HorizontalAlignment="Left" Height="10&quo ...

  8. Html5 突破微信限制实现大文件分割上传

    先来前端代码 <!DOCTYPE html> <html> <head> <meta name="viewport" content=&q ...

  9. Linux中split大文件分割和cat合并文件

    当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而不得不重新传输.这种情况下,可以先将大文件分割成小文件后分批传输,传完后再合并文件. 1.分割 ...

随机推荐

  1. 1.react的基础知识

    React 的基础之:JSX 语法 react 使用 JSX 语法,js 代码中可以写 HTML 代码. let myTitle = <h1>Hello, World!</h1> ...

  2. extjs控制器调用其他视图的函数实现控件赋值。

  3. LdapContext获取对象的属性

    //            dn = "cn=1,cn=Users,DC=域名,DC=COM";//            Attributes answer = ctx.getA ...

  4. java继承 子类重写父类方法

    package com.addd; //多态 public class Sld { private String name = "zhangsan"; public Sld() { ...

  5. 怎样在win7中 安装Tomcat7.0

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器. 我们可以到官方网站下载Tomcat7 工具/原料 win7 Tomcat7.0 方法/步骤 1 在官网下载软件: ...

  6. 线性表的链式存储——C语言实现

    SeqList.h #ifndef _WBM_LIST_H_ #define _WBM_LIST_H_ typedef void List; typedef void ListNode; //创建并且 ...

  7. BA 新web化 问题汇总

    1. 3D堆栈图在winform端无法显示,但在web端可以正常显示,说明与浏览器版本有关,在 IE 中设置文档模式为 IE8 即报错,IE9 却正常显示,可在 <head>节点下添加如下 ...

  8. Delphi IOS (二)

    1.Mac 中 simulator模拟器Home快捷键:command(Win键盘,Ctrl与Alt之间的键)+shift+h来代替,也可以点击菜单>HardWare>Home 2.iPh ...

  9. C语言学习笔记--函数与指针

    1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...

  10. 用JS实现,图片放大和缩小

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...