Winform中实现批量文件复制(附代码下载)
场景
效果

将要批量复制的文件拖拽到窗体中,然后点击下边选择目标文件夹,然后点击复制按钮。

注:
博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
新建一个窗体,布局设计如下
上面是一个ListView,下面是TextBox和两个Button,然后添加一个路径选择控件。

在窗体的load事件中对ListView进行样式设置
private void Form1_Load(object sender, EventArgs e)
{
listView1.GridLines = true;//在各数据之间形成网格线
listView1.View = View.Details;//显示列名称
listView1.FullRowSelect = true;//在单击某项时,对其进行选中
listView1.HeaderStyle = ColumnHeaderStyle.Nonclickable;//隐藏列标题
listView1.Columns.Add("文件路径", listView1.Width - , HorizontalAlignment.Right);
}
然后编写listView的脱拽事件,使其能获取到拖拽文件并显示
private void listView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy; //设置拖放操作中目标放置类型为复制
String[] str_Drop = (String[])e.Data.GetData(DataFormats.FileDrop, true);//检索数据格式相关联的数据
Data_List(listView1, str_Drop[]);
}
public void Data_List(ListView LV, string F) //Form或MouseEventArgs添加命名空间using System.Windows.Forms;
{
ListViewItem item = new ListViewItem(F);
LV.Items.Add(item);
}
然后编写三个点按钮的点击事件,使其打开路径选择对话框,并将选择的路径显示在TextBox中。
private void button2_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = folderBrowserDialog1.SelectedPath;
}
}
然后编写复制按钮的点击事件
private void button1_Click(object sender, EventArgs e)
{
string FileName = "";
int tem_n = ;
string DName = "";
if (textBox1.Text.Length > && listView1.Items.Count > )
{
try
{
for (int i = ; i < listView1.Items.Count; i++)
{
FileName = listView1.Items[i].SubItems[].Text;
tem_n = FileName.LastIndexOf("\\");
FileName = FileName.Substring(tem_n + , FileName.Length - tem_n - );
DName = textBox1.Text.Trim() + "\\" + FileName;
CopyFile(listView1.Items[i].SubItems[].Text, DName, );
this.Text = "复制:" + listView1.Items[i].SubItems[].Text;
}
MessageBox.Show("文件批量复制完成。");
}
catch
{
MessageBox.Show("文件复制错误。");
}
}
}
在复制按钮的点击事件中执行复制文件的方法CopyFile
FileStream FormerOpen;
FileStream ToFileOpen;
/// <summary>
/// 文件的复制
/// </summary>
/// <param FormerFile="string">源文件路径</param>
/// <param toFile="string">目的文件路径</param>
/// <param SectSize="int">传输大小</param>
/// <param progressBar="ProgressBar">ProgressBar控件</param>
public void CopyFile(string FormerFile, string toFile, int SectSize)
{
FileStream fileToCreate = new FileStream(toFile, FileMode.Create); //创建目的文件,如果已存在将被覆盖
fileToCreate.Close(); //关闭所有资源
fileToCreate.Dispose(); //释放所有资源
FormerOpen = new FileStream(FormerFile, FileMode.Open, FileAccess.Read);//以只读方式打开源文件
ToFileOpen = new FileStream(toFile, FileMode.Append, FileAccess.Write); //以写方式打开目的文件
//根据一次传输的大小,计算传输的个数
//int max = Convert.ToInt32(Math.Ceiling((double)FormerOpen.Length / (double)SectSize)); int FileSize; //要拷贝的文件的大小
//如果分段拷贝,即每次拷贝内容小于文件总长度
if (SectSize < FormerOpen.Length)
{
byte[] buffer = new byte[SectSize]; //根据传输的大小,定义一个字节数组
int copied = ; //记录传输的大小
while (copied <= ((int)FormerOpen.Length - SectSize)) //拷贝主体部分
{
FileSize = FormerOpen.Read(buffer, , SectSize); //从0开始读,每次最大读SectSize
FormerOpen.Flush(); //清空缓存
ToFileOpen.Write(buffer, , SectSize); //向目的文件写入字节
ToFileOpen.Flush(); //清空缓存
ToFileOpen.Position = FormerOpen.Position; //使源文件和目的文件流的位置相同
copied += FileSize; //记录已拷贝的大小
}
int left = (int)FormerOpen.Length - copied; //获取剩余大小
FileSize = FormerOpen.Read(buffer, , left); //读取剩余的字节
FormerOpen.Flush(); //清空缓存
ToFileOpen.Write(buffer, , left); //写入剩余的部分
ToFileOpen.Flush(); //清空缓存
}
//如果整体拷贝,即每次拷贝内容大于文件总长度
else
{
byte[] buffer = new byte[FormerOpen.Length]; //获取文件的大小
FormerOpen.Read(buffer, , (int)FormerOpen.Length); //读取源文件的字节
FormerOpen.Flush(); //清空缓存
ToFileOpen.Write(buffer, , (int)FormerOpen.Length); //写放字节
ToFileOpen.Flush(); //清空缓存
}
FormerOpen.Close(); //释放所有资源
ToFileOpen.Close(); //释放所有资源
}
代码下载
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/12028246
Winform中实现批量文件复制(附代码下载)的更多相关文章
- Winform中实现拖拽文件到ListView获取文件类型(附代码下载)
场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个for ...
- 在winform中调用js文件并输出结果
在winform中调用js文件并输出结果默认分类 2007-10-19 16:35:06 阅读25 评论0 字号:大中小 由于项目需要在winform中调一个强大的js,所以把这个tip记录在此: 1 ...
- (转)在WinForm中选择本地文件
相信很多朋友在日常的编程中总会遇到各钟各样的问题,关于在WinForm中选择本地文件就是很多朋友们都认为很难的一个学习.net的难点, 在WebForm中提供了FileUpload控件来供我们选择本地 ...
- 【.Net】在WinForm中选择本地文件
相信很多朋友在日常的编程中总会遇到各钟各样的问题,关于在WinForm中选择本地文件就是很多朋友们都认为很难的一个学习.net的难点, 在WebForm中提供了FileUpload控件来供我们选择本地 ...
- C#和Java中执行SQL文件脚本的代码(非常有用)
原文:C#和Java中执行SQL文件脚本的代码(非常有用) 我们在做程序的时候有事后会涉及到利用sql文件 直接执行,可是在sql文件中有很多注释,我们要一句一句的执行首先必须的得把sql文件解析 去 ...
- 读取web工程中.properties资源文件的模板代码
读取web工程中.properties资源文件的模板代码 // 读取web工程中.properties资源文件的模板代码 private void test2() throws IOException ...
- JPA中实现双向多对多的关联关系(附代码下载)
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载
一.分布式消息总线以及基于Socket的实现 在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于.N ...
- Dubbo与SpringBoot整合流程(从实例入手,附代码下载)
场景 Dubbo环境搭建-管理控制台dubbo-admin实现服务监控: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10362 ...
随机推荐
- Java常用类、接口关系图谱
呕心沥血画出此图,希望在使用Java类.接口时捋顺其关系,从而更好的组织程序逻辑---请看图 Object分出来的类都是其子类 Iterable接口分出的也是子接口 从继承关系分析,其父类实现的接口子 ...
- SpringMVC 请求/响应乱码问题解决方案
请求乱码解决之get乱码问题 GET请求乱码原因分析 GET请求参数是通过请求行中的URL发送给Web服务器(Tomcat)的. Tomcat服务器会对URL进行编码操作(此时使用的是Tomcat设置 ...
- Spring(Bean)4 配置数据源、连接池
<!-- 配置数据源 Mysql c3p0: 连接池. <bean id="dataSource" class="com.mchange.v2.c3p0.Co ...
- CCNA 之 五 路由协议 一 静态路由
静态路由 路由选择原理 什么是路由? 就如同去某一个地方,会有很多种路线,每一条路线经都可以称之为路由: 路由器中会维护一张路由表,每一个表项都是一条路由,也就是去往某个网络的路径,然后将对应的数据包 ...
- 运维常用 MySQL 命令
目录 设置用户密码 方法一 方法二 丢失root密码找回 添加用户 设置用户密码 方法一 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPass ...
- MySQL 库、表、记录、相关操作(2)
库.表.记录.相关操作(2) 字段操作 create table tf1( id int primary key auto_increment, x int, y int ); # 修改 alter ...
- Chrome快捷键吐血整理
Chrom是平时开发过程中最常用到的浏览器,使用快捷键操作Chrome能提高我们的使用效率,而且可以脱离鼠标进行操作.本篇博客就对平时我们常用的Chrome快捷键做一个整理总结.大家拿走不谢,哈哈~~ ...
- Mybatis整合spring详细教程(适合小白童鞋)
目录 1.整合思路 2.整合需要的jar包 3.整合的步骤 4.Dao的开发的两种实现方式 6.Dao的开发的实现方式总结图 @ Mybatis整合spring其实就是SSM框架中SM的整合集成. 1 ...
- Python--glob模块
0.glob模块和通配符 glob模块最主要的方法有2个: 1.glob() 2.iglob() 以上2分方法一般和通配符一起使用,常用的通配符有3个: * :匹配零个或多个字符 ? :匹配任何单个的 ...
- IJKPlayer如何支持https
给ijkplayer安装支持https 首先使用如下终端命令安装yasm 第一: 1. curl http://www.tortall.NET/projects/yasm/releases/yasm- ...