文件备份助手-基于C#winform

120 阅读2分钟

我正在参加「创意开发 投稿大赛」详情请看:掘金创意开发大赛来了!

  • 电脑的文件多又乱,有强迫症如何整理呢?程序员当然要用程序员的方式了,最简单的方式,我们可以用程序根据文件的后缀名进行归类。
  • 我们的效果就是用winfrom画出一个机器猫主窗体,当放入文件到机器猫的嘴里时,自动备份文件,同时机器猫的肚子上显示文件备份的路径和进度。
  • 启动效果

image.png

  • 放入文件效果
    image.png

  • 大文件复制代码,通过直接调用shell32.dll 动态链接库来进行文件的复制和移动,这样可以最大程度的保证我们移动复制过程中文件的可靠性。而且方便,性能远远好于自己读取写入。

        #region .net封装后的api
        /// <summary>
        ///文件拷贝
        /// </summary>
        /// <param name="oldfilenmme"></param>
        /// <param name="newfilenmme"></param>
        /// <param name="overwrite"></param>
        /// <returns></returns>
        public static bool FileCopyTo(string oldfilenmme, string newfilenmme, bool overwrite)
        {
            FileInfo oldfile = new FileInfo(oldfilenmme);
            FileInfo newfile = oldfile.CopyTo(newfilenmme, overwrite);
            return newfile.Exists;
        }
        #endregion

        #region 
         
            private const int FO_COPY = 0x0002;
            private const int FOF_ALLOWUNDO = 0x00044;
            //显示进度条  0x00044 // 不显示一个进度对话框 0x0100 显示进度对话框单不显示进度条  0x0002显示进度条和对话框  
            private const int FOF_SILENT = 0x0002;//0x0100;  
                                                  //  
            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 0)]
            public struct SHFILEOPSTRUCT
            {
             public IntPtr hwnd;//指向发送消息的窗口
            [MarshalAs(UnmanagedType.U4)]
                public int wFunc;//执行的操作
            public string pFrom;//源文件名
            public string pTo;//目标文件名
            public short fFlags;//操作与确认标识
            [MarshalAs(UnmanagedType.Bool)]
                public bool fAnyOperationsAborted;//操作是否终止
            public IntPtr hNameMappings;//文件映射
            public string lpszProgressTitle;//进度条标题
             }
            [DllImport("shell32.dll", CharSet = CharSet.Auto)]
            static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);
            public static bool DoCopy(string strSource, string strTarget)
            {
                SHFILEOPSTRUCT fileop = new SHFILEOPSTRUCT();
                fileop.wFunc = FO_COPY; //1.FO_COPY:复制2.FO_DELETE:删除3.FO_MOVE:移动4.FO_RENAME:重命名
                fileop.pFrom = strSource;
                fileop.lpszProgressTitle = "复制拷贝中";
                fileop.pTo = strTarget;
                //fileop.fFlags = FOF_ALLOWUNDO;  
                fileop.fFlags = FOF_SILENT;
                return SHFileOperation(ref fileop) == 0;
            }
        
        #endregion
  • 我们也可以根据自定义后缀名进行文件规则整理,自定义的文件规则存储在本地的一个xml配置文件中

image.png

image.png

  • 这个就是我们整理后的效果拉,这样我们就可以方便的进行文件归类备份,再也不用满电脑都是各种文件,各种备份,已经备份的备份了。

image.png