• 一个批量替换压缩文件工具的生产过程——打杂程序员的闲暇时光


    因为需要,去寻找?还是自己做?
    作为一个公司的打杂人员,总是需要做一些没有多大实效的琐事,这其实就是我的一个学习机会。哪里需要我,我就出现在哪里,现在需要批量处理200多个压缩文件,需要将现有的程序文件更新到这些压缩包中替换掉原有的,手动操作不免麻烦了一些,在这之前我的确是手动操作来着,无奈,为了偷懒有时间来写随笔,只好想办法自己写一个适合我自己使用的桌面程序了。
    本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com)
    准备工作
    选择自己做一个可以批量处理的工具,并且在以后的打杂生活中可以继续丰富这个小工具
    ①安装VS。因为只是写桌面程序,我就下载了VS deskTop版本
    ②分析思路流程。将D:worksrc下的文件夹的中的内容去替换掉D: est580下的200个文件夹中
    ③手动批量解压,批量压缩RAR工具支持,程序中暂且不加入批量解压
    ④程序中加入浏览选择文件,开始操作后显示当前操作记录的提示,替换完成一个文件后自动压缩该文件
    界面献丑

    movefile之浏览
    最开始直接选择的是默认文本框,需要手动输入才能上地址,后来看了其它软件用一个浏览功能,我就想方设法也想来添加一下这个功能。搜索之后发现需要用到的是FolderBrowserDialog类
    提示用户选择文件夹代码:
         private string browseFolder(string where)
            {
                FolderBrowserDialog fb = new FolderBrowserDialog();
                if (fb.ShowDialog() == DialogResult.OK)
                {
                    string wherePathValue = fb.SelectedPath;
                    switch (where)
                    {
                        case "from":
                            fromPathValue = wherePathValue;
                            break;
                        case "to":
                            toPathValue = wherePathValue;
                            break;
                        default: 
                            break;
                    }
                    return wherePathValue;
                }
                return null;
            }
    
    写到这里我想吐槽一下这个代码格式,之前我从写hello world开始就养成了一个习惯,括号{写在末尾,如:
         private function sayHello() {
                $str = "my name is unofficial,www.pushself.com是可以直接访问的,我只是想说一句'hello world!'";
                return $str;
            }
    

    参考资料:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.folderbrowserdialog(VS.80).aspx

    movefile之替换操作
    需要使用到DirectoryInfo 类,命名空间:System.IO,公开用于创建、移动和枚举目录和子目录的实例方法。
    遍历文件b中的文件夹:
                try
                {
                    DirectoryInfo Dir = new DirectoryInfo(toPathValue);
                    foreach (DirectoryInfo d in Dir.GetDirectories())
                    {
                        string toPathValueNew = toPathValue + "\" + d.Name;
                        current_explain.Text = "正在操作" + toPathValueNew;
                        copyFiles(fromPathValue, toPathValueNew);
                        rarFile(toPathValueNew);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    return;
                }
    
    上面调用的是copyFiles方法,这个方法就是遍历文件夹复制文件至对应的文件夹中替换掉文件。这中间用到的知识之前在无限级分类中可以使用到,程序思路基本上都是一样的,会一次就会下一次了,只是习惯了弱语言的方式后再来写这个,难免过程中有些不习惯。
            private void copyFiles(string varFromDirectory, string varToDirectory)
            {
                try
                {
                    Directory.CreateDirectory(varToDirectory);
    
                    if (!Directory.Exists(varFromDirectory)) return;
    
                    string[] directories = Directory.GetDirectories(varFromDirectory);
    
                    if (directories.Length > 0)
                    {
                        foreach (string d in directories)
                        {
                            copyFiles(d, varToDirectory + d.Substring(d.LastIndexOf("\")));
                        }
                    }
    
                    string[] files = Directory.GetFiles(varFromDirectory);
    
                    if (files.Length > 0)
                    {
                        foreach (string s in files)
                        {
                            File.Copy(s, varToDirectory + s.Substring(s.LastIndexOf("\")), true);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
    
    参考资料:http://msdn.microsoft.com/zh-cn/library/system.io.directoryinfo(VS.80).aspx
    本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com)
    movefile之压缩操作
    文件压缩需要调用本地的rar程序来操作,需要用到的using System.Diagnostics;(//using System.Threading;)压缩文件有很多命令,具体的可以百度谷歌一下。
    文件压缩操作:
            private void rarFile(string dirName)
            {
                Process process = new Process();
                process.StartInfo.FileName = "D:\Program Files (x86)\winrar\WinRAR.exe";//这是你安装Winrar的路径
                process.StartInfo.Arguments = "a -ep1 -r " + dirName + ".rar " + dirName;//
                process.Start();
                //while (!process.HasExited)
                //{
                //    Thread.Sleep(1);
                //}
                process.WaitForExit();
                process.Close();
            }
    
    上面调用的是rarFile方法,这个方法就是压缩b文件夹下的文件夹,按照原来的路径压缩完成,压缩文件直接留在b文件夹下。
    参考资料:http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.aspx
    本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com)
    交流学习
    项目代码在:https://github.com/sfanr/movefile
    希望能够与大家多多交流学习。
    应用程序试用地址:http://download.csdn.net/download/w1016908017/7902901
    末尾留言:直到现在程序还在执行中,有一个问题就是压缩文件的窗口老是弹出影响我写文字,我觉得后面版本可以把这个优化进去,具体的更新内容会根据我后面的需要更新。 本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com)
  • 相关阅读:
    Silverlight生命周期概述
    NVolecity 处理DataTable 小记
    Adobe CS6 安装的时候,安装到AdobeHelp 死掉的解决方法
    验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate 的解决办法
    为什么要写博客
    [原创]SQL发音考证(搜寻SQL86标准)
    [转载]《暗时间》:为什么你应该(从现在开始就)写博客
    [转载]《暗时间》:书写是为了更好的思考
    [原创]手把手教你写网络爬虫(1):网易云音乐歌单
    javascript简单的日历实现《转》
  • 原文地址:https://www.cnblogs.com/unofficial/p/3967957.html
Copyright © 2020-2023  润新知