说明(2017-11-17 14:46:05):

1. 因为经常要从U盘里面删除版本,然后添加版本,每次都要几个人手动复制粘贴,费时费力,就花了一下午时间写了个程序,自动删除和添加版本。

2. DriverInfo类可以识别插到电脑的U盘,还能识别U盘容量。

3. 现在是先全部删除选中版本,再一个U盘一个U盘的往里拷贝,不知道用多线程是否能同时拷贝。

4. 如果遇到有一个U盘不能读取,软件会报错,提示未检测到路径,可以加个判断,判断一下U盘路径是否存在。不过我懒得改了,用之前先用刻盘软件检查一下有没有坏盘就好了。

5. 如果遇到里面已经存在这个版本了,目前是直接覆盖,不然会报错提示文件已存在,这里也可以判断一下是否存在这个文件,我也懒得改了。

6. 用c#在Windows系统操作文件还是很方便的,也不用找这个库那个库,我猜想如果用python做,估计找库就得找死,而且也没什么界面。

软件界面:

Form1.cs

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions; namespace ChangeBin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//主程序
private void Form1_Load(object sender, EventArgs e)
{
ShowSource();
List<string> UdiskNames = GetUdiskNames();
//foreach (string udiskName in UdiskNames)
//{
// Console.WriteLine(udiskName);
//} } private string[] GetInsertFileName()
{
List<string> fileNames = new List<string>();
string[] chineseFile = Directory.GetFiles("../../res/1_语文");
string[] mathFile = Directory.GetFiles("../../res/2_数学");
string[] englishFile = Directory.GetFiles("../../res/3_英语"); foreach (string name in chineseFile)
{
fileNames.Add(name);
}
foreach (string name in mathFile)
{
fileNames.Add(name);
}
foreach (string name in englishFile)
{
fileNames.Add(name);
}
return fileNames.ToArray(); }
//全选右侧
private void cb7_CheckedChanged(object sender, EventArgs e)
{
if (cb7.Checked)
{
for (int i = ; i < clb4.Items.Count; i++)
{
clb4.SetItemChecked(i, true);
}
for (int i = ; i < clb5.Items.Count; i++)
{
clb5.SetItemChecked(i, true);
}
for (int i = ; i < clb6.Items.Count; i++)
{
clb6.SetItemChecked(i, true);
}
}
else
{
for (int i = ; i < clb4.Items.Count; i++)
{
clb4.SetItemChecked(i, false);
}
for (int i = ; i < clb5.Items.Count; i++)
{
clb5.SetItemChecked(i, false);
}
for (int i = ; i < clb6.Items.Count; i++)
{
clb6.SetItemChecked(i, false);
}
} } //清除左侧
private void btnClear1_Click(object sender, EventArgs e)
{
for (int i = ; i < clb1.Items.Count; i++)
{
clb1.SetItemChecked(i, false);
}
for (int i = ; i < clb2.Items.Count; i++)
{
clb2.SetItemChecked(i, false);
}
for (int i = ; i < clb3.Items.Count; i++)
{
clb3.SetItemChecked(i, false);
}
} //显示进度
private void cbShowBack_CheckedChanged(object sender, EventArgs e)
{
BackGround bg = new BackGround();
bg.Show();
} //获取U盘里的需要删除的文件路径(怎么获取U盘容量??????名字 ??)
private List<string> GetUdiskNames()
{
List<string> diskNames = new List<string>();
DriveInfo[] driveInfo = DriveInfo.GetDrives();
//15711846400byte
foreach (DriveInfo d in driveInfo)
{
if (d.DriveType == DriveType.Removable)
{
diskNames.Add(d.Name);
}
}
return diskNames;
} //显示主页面
private void ShowSource()
{
//获取需要拷贝的bin包名字和路径
string[] chineseFile = Directory.GetFiles("../../res/1_语文");
string[] mathFile = Directory.GetFiles("../../res/2_数学");
string[] englishFile = Directory.GetFiles("../../res/3_英语"); List<string> chineseFileName = new List<string>();
List<string> mathFileName = new List<string>();
List<string> englishFileName = new List<string>();
foreach (string name in chineseFile)
{
chineseFileName.Add(Regex.Split(name, @"1_语文\\")[]);
}
foreach (string name in mathFile)
{
mathFileName.Add(Regex.Split(name, @"2_数学\\")[]);
}
foreach (string name in englishFile)
{
englishFileName.Add(Regex.Split(name, @"3_英语\\")[]);
}
//把需要拷贝的文件名加入选择列表
clb4.Items.AddRange(chineseFileName.ToArray());
clb5.Items.AddRange(mathFileName.ToArray());
clb6.Items.AddRange(englishFileName.ToArray());
} //获取删除列表
private List<string> GetDeleteList()
{
List<string> UdiskNames = GetUdiskNames();
List<string> delNames = new List<string>();
List<string> delPaths = new List<string>();
foreach (var item in clb1.CheckedItems)
{
delNames.Add(item.ToString());
}
foreach (var item in clb2.CheckedItems)
{
delNames.Add(item.ToString());
}
foreach (var item in clb3.CheckedItems)
{
delNames.Add(item.ToString());
}
foreach (string udiskName in UdiskNames)
{
foreach (string delName in delNames)
{
if (delName.Contains("语文"))
{
delPaths.Add(udiskName + @"Root\Data\res\1_语文\" + delName + @".bin");
}
else if (delName.Contains("数学"))
{
delPaths.Add(udiskName + @"Root\Data\res\2_数学\" + delName + @".bin");
}
else if (delName.Contains("英语"))
{
delPaths.Add(udiskName + @"Root\Data\res\3_英语\" + delName + @".bin");
} }
}
return delPaths;
}
//获取插入列表
private List<string> GetInsertList()
{
List<string> InsertList = new List<string>();
//获取需要拷贝的bin包名字和路径
string[] chineseFile = Directory.GetFiles("../../res/1_语文");
string[] mathFile = Directory.GetFiles("../../res/2_数学");
string[] englishFile = Directory.GetFiles("../../res/3_英语");
foreach (string file in chineseFile)
{
InsertList.Add(file);
}
foreach (string file in mathFile)
{
InsertList.Add(file);
}
foreach (string file in englishFile)
{
InsertList.Add(file);
}
foreach (string item in InsertList)
{
Console.WriteLine(item);
}
return InsertList;
} //点击开始,开始删除,插入(要不要分开进行?????)
private void btnStart_Click(object sender, EventArgs e)
{
//删除
List<string> UdiskNames = GetUdiskNames();
List<string> delPaths = GetDeleteList();
if (delPaths.Count > )
{
foreach (string delPath in delPaths)
{
//Console.WriteLine(delPath); if (File.Exists(delPath))
{
File.Delete(delPath);
Console.WriteLine("已删除" + delPath);
}
else
{
//为啥删完还会显示不存在?循环了两次?还是delPath里面存了两遍?
Console.WriteLine(delPath + "不存在");
} }
}
else
{
MessageBox.Show("没有要删除的bin包");
}
//插入
//获取需要拷贝的bin包名字和路径
List<string> insertList = GetInsertList();
List<string> chineseFileName = new List<string>();
List<string> mathFileName = new List<string>();
List<string> englishFileName = new List<string>(); if (insertList.Count > )
{
foreach (string uDiskName in UdiskNames)
{
foreach (string insertFile in insertList)
{
if (File.Exists(insertFile))
{
string desFileName = null;
string insertFileName = null;
if (insertFile.Contains("语文"))
{
insertFileName = Regex.Split(insertFile, @"1_语文\\")[];
desFileName = uDiskName + @"Root\Data\res\1_语文\" + insertFileName;
}
else if (insertFile.Contains("数学"))
{
insertFileName = Regex.Split(insertFile, @"2_数学\\")[];
desFileName = uDiskName + @"Root\Data\res\2_数学\" + insertFileName;
}
else if (insertFile.Contains("英语"))
{
insertFileName = Regex.Split(insertFile, @"3_英语\\")[];
desFileName = uDiskName + @"Root\Data\res\3_英语\" + insertFileName;
}
if (desFileName != null)
{
//第三个参数是否允许覆盖???
File.Copy(insertFile, desFileName,true);
Console.WriteLine("已插入:" + desFileName);
}
}
else
{
Console.WriteLine("插入文件:" + insertFile + "不存在");
}
}
} }
MessageBox.Show("拷贝完毕!");
}
}
}

C#学习笔记(25)——用刻盘器批量从U盘删除添加文件的更多相关文章

  1. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  2. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

  3. Linux学习笔记(4)磁盘分区(fdisk)、挂载与文件系统命令

    Linux学习笔记(4)磁盘分区(fdisk).挂载与文件系统命令 1.磁盘分区是怎么表示的? 1.1 对于IDE接口,第一主盘为hda,第1从盘为hdb,第1从盘的第1个分区为hdb1 1.2 对于 ...

  4. linux命令学习笔记(25):linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组. 最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loc ...

  5. ‎Cocos2d-x 学习笔记(25) 渲染 绘制 Render

    [Cocos2d-x]学习笔记目录 本文链接:https://www.cnblogs.com/deepcho/p/cocos2dx-render.html 1. 从程序入口到渲染方法 一个Cocos2 ...

  6. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥

    1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...

  7. [原创]java WEB学习笔记25:MVC案例完整实践(part 6)---新增操作的设计与实现

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

    生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...

  9. LearnOpenGL学习笔记(四)——着色器类编写

    之前我们将着色器的代码用glsl写好之后,保存为字符串指针,然后用一个函数去编译它,这是一种手段,对于简单的着色器代码可以这样.但当我们针对复杂的着色器,我们发现编写.编译.管理着色器是一件麻烦事.我 ...

随机推荐

  1. HDU 2227 Find the nondecreasing subsequences (数状数组)

    Find the nondecreasing subsequences Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/3 ...

  2. Sqlserver大数据量分区表创建

    /* 逆向删除对象 DROP PARTITION SCHEME [PS_BasicPolicy2014]; DROP PARTITION FUNCTION [PF_BasicPolicy2014]; ...

  3. Android平台的音乐资源管理与播放

    Android平台基于Linux和开放手机联盟(OHA)系统,经过中国移动的创新研发,设计出拥有新颖独特的用户操作界面,增强了浏览器能力和WAP 兼容性,优化了多媒体领域的OpenCORE.浏览器领域 ...

  4. Intent----android中的伟大邮差

    在android中,intent就像是一个邮差,辛勤高效的在各个组件之间来回穿梭.我们可以通过它启动一个Activity或者Service,或者是发送给广播组件,又或者是与后台的Service进行通信 ...

  5. MySQL -- Fast Index Creation

    1.fast index creation简介 MySQL5.5之后,对innodb表创建或删除辅助索引的效率提升了很多,即增加了新的功能fast index creation.因为MySQL5.5之 ...

  6. Swift2.0语言教程之函数嵌套调用形式

    Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还能够调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其它函数:还 ...

  7. Redis 的安装与使用(单节点)

    Redis 的安装与使用(单节点)   环境:CentOS 6.5 Redis 版本:redis-3.0 (考虑到Redis3.0 在集群和性能提升方面的特性,rc 版为正式版的候选版,而且 很快就出 ...

  8. 开关电源电路中变压器次级输出绕组RC串联并接在二极管两端的作用

    二极管反向恢复时会产生浪涌电压,这里RC主要是吸收二极管D1产生的浪涌电压,防止二极管损坏. 寄生电容:寄生电容一般是指电感,电阻,芯片引脚等在高频情况下表现出来的电容特性.实际上,一个电阻等效于一个 ...

  9. 【转载】centos7.3 防火墙配置

    firewalld介绍原文:https://www.cnblogs.com/moxiaoan/p/5683743.html 一. centos7 默认有一个防火墙 firewalld,具体使用如下: ...

  10. android开发之interpolator的使用

    android:interpolator Interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repea ...