zoukankan      html  css  js  c++  java
  • 自动复制指定文件通用类的使用 (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 中国大陆许可协议进行许可。

  • 相关阅读:
    解题:HNOI 2008 玩具装箱
    2016级算法第一次上机助教版解题报告
    求解斐波那契数列复杂度分析
    数据库复习之规范化理论应用(第八次上机内容)
    数据库复习之规范化理论
    题目1042:Coincidence(最长公共子序列)
    题目1020:最小长方形(简单)
    题目1016:火星A+B(字符串拆分)
    题目1014:排名(结构体排序)
    题目1021:统计字符(hash简单应用)
  • 原文地址:https://www.cnblogs.com/somnus0208/p/2881775.html
Copyright © 2011-2022 走看看