自动复制指定文件通用类的使用 (USB存储与硬盘之间)(Automatic Copying Files between Host and USB Devices using C#)

  曾经在研究这么一个工具,当优盘等移动设备插入电脑时,后台程序自动复制优盘内的某些文件到电脑,或者是复制当前电脑内的指定文件到优盘。也使用过C# + WinForm实现了前一个功能,但也由于设计时结构化程度太强,代码太多就不易维护。同时,原始设计可移植性性不强,比如如果要定制要复制文件类型,每次需要重新编译源代码,而且在异常处理,逻辑结构上也不易于后期维护。

  因此,结合OO设计思想和Strategy设计模式,重构了之前了代码。代码已发布在CodePlex上(下载地址见最后),代码设计方案请查看wiki,现简单地说一下使用方法:

  (1)打开Visual Studio 新建Windows窗体应用程序(C# + .NET 4),把下载下来的程序集CoreLib.dll、UILib.dll以及ZipLib.dll添加到当前引用(如图)                            

  (2)在Form1类上添加命名空间引用,并为此类添加父类,代码如下

 1 using Somnus.Windows.Forms;
 2 using Somnus.IO;
 3 using Somnus.IO.Compression;
 4 namespace Demo
 5 {
 6     //父类提供了移动设备插入时的事件,待会实现其即可
 7     public partial class Form1 : EventedForm
 8     {
 9         public Form1()
10         {
11             InitializeComponent();
12         }
13     }
14 }

  (3)现在这个窗口类就多了一个事件InsertNew,该事件会在插入移动存储设备时触发,如图 

                      

    添加事件处理程序,代码如下

 1 private void Form1_InsertNew(object sender, EventArgs e)
 2         {
 3             //获取当前系统已有的移动存储设备
 4             UsbDrive[] allDrives = UsbDrive.GetDrives();
 5             //设置处理行为类,优盘到硬盘,初始化复制文件类型
 6             CopyToHDBehavior behavior = new CopyToHDBehavior(".txt|.docx|.doc|.xls");
 7             //设置目的地路径,默认设置为系统盘目录下
 8             /*behavior.DestinationPath = @"E:\"*/;
 9             foreach (UsbDrive drive in allDrives)
10             {
11                 try
12                 {
13                     //开始处理
14                     drive.PerformBehavior(behavior);
15                 }
16                 catch (System.Exception ex)
17                 {
18                     MessageBox.Show(ex.Message);
19                 }
20             }
21         }

    这样在系统盘目录下就声称一个MD5值为文件夹名,内容为复制的文件的文件夹。(优盘目录下会生成签名文件sig.xml,具体请查看wiki)当然,如果是要从硬盘复制到优盘,代码就照例更改如下

 1         private void Form1_InsertNew(object sender, EventArgs e)
 2         {
 3             //获取当前系统已有的移动存储设备
 4             UsbDrive[] allDrives = UsbDrive.GetDrives();
 5             //设置处理行为类,硬盘到优盘,初始化复制文件类型
 6             CopyFromHDBehavior behavior = new CopyFromHDBehavior(".txt|.doc");
 7             //设置排除的磁盘卷,如排除D盘和E盘,默认设置包括硬盘所有卷
 8             /*behavior.ExcludedDiskNames = "D:|E:";*/
 9             //设置是否包括其他磁盘,默认设置为不包括其他卷,只包括当前用户桌面
10             /*behavior.IsIncludedOtherVolumes = true;*/
11 
12             foreach (UsbDrive drive in allDrives)
13             {
14                 try
15                 {
16                     //开始处理
17                     drive.PerformBehavior(behavior);
18                 }
19                 catch (System.Exception ex)
20                 {
21                     MessageBox.Show(ex.Message);
22                 }
23             }
24         }

    优盘目录下生成由扫描电脑后所得文件的压缩包。

  (4)窗体还可以做其它外观设置,比如窗体加载时是否显示等,还请大家进一步优化。

    文件下载地址:https://somnus0208.codeplex.com/

  Somnus.V

知识共享许可协议
本作品采用知识共享署名-相同方式共享 2.5 中国大陆许可协议进行许可。

原文地址:https://www.cnblogs.com/somnus0208/p/2881775.html