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 _____Scanner用法
今天就来说一说Scanner用法,以前我在学C的时候记得第一天学的是很普遍的HelloWord的输出,JAVA中的输出是这样子的, public class ScannerWriter { publi ...
- Gzip,BZip2,Lzo,Snappy总结
gzip,bzip2,lzo,snappy是hadoop中比较常见的文件压缩格式,可以节省很多硬盘存储,以下是Gzip , BZip2 , Lzo Snappy 四种方式的优缺点 和使用场景 Gzip ...
- 纵论WebAssembly,JS在性能逆境下召唤强援
webassembly的作用 webassembly是一种底层的二进制数据格式和一套可以操作这种数据的JS接口的统称.我们可以认为webassembly的范畴里包含两部分 wasm: 一种体积小.加载 ...
- Elasticsearch系列---增量更新原理及优势
概要 本篇主要介绍增量更新(partial update,也叫局部更新)的核心原理,介绍6.3.1版本的Elasticsearch脚本使用实例和增量更新的优势. 增量更新过程与原理 简单回顾 前文我们 ...
- adb查看Android app包名
1. 确保电脑已经安装了adb.exe文件 2. 使用USB连接你的手机到电脑上,输入下图所示的命令后按下回车键:adb devices 3. 使用手机打开某个应用程序 4.回到命令号窗口,输入代码如 ...
- Nginx+MySQL+PHP+Redis多机部署(测试发布discuz论坛)
链接:LNMP+Redis单机部署 1.实战多机部署环境 nginx服务器: 192.168.1.3 php服务器: 192.168.1.4 mysql服务器: 192.168.1.10 red ...
- 一张图讲解单机FastDFS图片服务器安装步骤(修订版)
前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDFS组件中单机安装流程. 单机版架构图 以下为单机FastDFS安装步骤 一.环境准备 CentOS 7.X libfastcomm ...
- Docker简介与安装
简介与安装 简介 Docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的 ...
- 想实现多人协作的“在线Excel”?真没那么简单
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. Excel是我们办公中常用的工具 ,它几乎能为我们处理大部分数据,友好的交互 ...
- 详细nginx配置SSL
1.nginx的ssl 让nginx实现用https来访问网站,http是80端口,https是443端口. https其实就是一种加密的http 2.为什么要加密 例子:在网上银行汇款,在你汇款的过 ...