有的时候由于工作需要,移动一些源代码,把源代码打包。压缩下来还有20,30MB,但实际一个解决方案有很多项目,每个项目都会生成BIN文件夹,还有Obj文件夹,其中包含有程序集。这些个程序集是没有必要打包,有代码就行了。所以在压缩时,把它们分开。最后压缩下来只有3,4MB,功能强大的WinRAR支持这个操作。可以排除不压缩的文件夹或文件。用C#写一个WinForm调用命令行的RAR来实现这些操作吧
有的时候由于工作需要,移动一些源代码,把源代码打包。压缩下来还有20,30MB,但实际一个解决方案有很多项目,每个项目都会生成BIN文件夹,还有Obj文件夹,其中包含有程序集。这些个程序集是没有必要打包,有代码就行了。所以在压缩时,把它们分开。最后压缩下来只有3,4MB,功能强大的WinRAR支持这个操作。可以排除不压缩的文件夹或文件。用C#写一个WinForm调用命令行的RAR来实现这些操作吧,代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1 const int ERROR_FILE_NOT_FOUND = 2;
2 const int ERROR_ACCESS_DENIED = 5;
3
4 /// <summary>
5 /// Open Target Folder Select dialog
6 /// </summary>
7 /// <param name="sender"></param>
8 /// <param name="e"></param>
9 /// <remarks>Author Petter Liu http://www.cnblogs.com/wintersun/ </remarks>
10 private void button1_Click(object sender, EventArgs e)
11 {
12 folderBrowserDialog2.ShowDialog();
13 txtFolderTarget.Text = folderBrowserDialog2.SelectedPath;
14 txtFolderTarget.Text = Path.Combine(txtFolderTarget.Text,Path.GetFileName(txtFolderSrc.Text));
15 if (!string.IsNullOrEmpty(txtFolderSrc.Text))
16 this.btnGo.Enabled = true;
17 }
18
19 /// <summary>
20 /// Open Source Folder Select dialog
21 /// </summary>
22 /// <param name="sender"></param>
23 /// <param name="e"></param>
24 /// <remarks>Author Petter Liu http://www.cnblogs.com/wintersun/ </remarks>
25 private void button2_Click(object sender, EventArgs e)
26 {
27 folderBrowserDialog1.ShowDialog();
28 folderBrowserDialog1.ShowNewFolderButton = false;
29 txtFolderSrc.Text=folderBrowserDialog1.SelectedPath;
30 }
31
32 /// <summary>
33 /// Execute WinRar Packet Source code
34 /// </summary>
35 /// <param name="sender"></param>
36 /// <param name="e"></param>
37 /// <remarks>Author Petter Liu http://www.cnblogs.com/wintersun/ </remarks>
38 private void button3_Click(object sender, EventArgs e)
39 {
40 string strSrcPath = txtFolderSrc.Text;
41 string strTargetPath = txtFolderTarget.Text;
42 //关键的参数,具体内容参看WinRAR帮助手册。
43 //-x*\\bin\\* -x*\\bin -x*\\obj\\* -x*\\obj 排除bin,obj文件夹里所有文件,以及文件本身。
44 //注意有转义字符
45 string arg = " a -r -ag\"-[YYYY-MM-DD-HH-MM-SS]\" -m5 -x*\\bin\\* -x*\\bin -x*\\obj\\* -x*\\obj ";
46
47 System.Diagnostics.Process ProcessRar = new System.Diagnostics.Process();
48 ProcessRar.StartInfo.FileName = "C:\\Program Files\\WinRAR\\Rar.exe";
49 ProcessRar.StartInfo.CreateNoWindow = true;
50
51 if (this.chkFileName.Checked==false)
52 arg = " a -r -m5 -x*\\bin\\* -x*\\bin -x*\\obj\\* -x*\\obj ";
53
54 //图形化界面要排除的文件中可以输入 "*\bin\*" "*\bin\" "*\obj\*" "*\obj\"
55 ProcessRar.StartInfo.Arguments = string.Format("{0}{1} {2}",arg,strTargetPath, strSrcPath);
56 try
57 {
58 ProcessRar.Start();
59 }
60 catch (Win32Exception ex)
61 {
62 if (ex.NativeErrorCode == ERROR_FILE_NOT_FOUND)
63 {
64 MessageBox.Show(ex.Message + ". Check the path.");
65 }
66
67 else if (ex.NativeErrorCode == ERROR_ACCESS_DENIED)
68 {
69 MessageBox.Show(ex.Message + ". You do not have permission to print this file.");
70 }
71 }
72 if (ProcessRar.HasExited)
73 {
74 int iExitCode = ProcessRar.ExitCode;
75 string statusstr;
76 if (iExitCode == 0)
77 {
78 statusstr = iExitCode.ToString() + " Job Complete";
79 }
80 else
81 {
82 statusstr =iExitCode.ToString() + " Job Fail.";
83 }
84 MessageBox.Show(statusstr);
85 }
86 ProcessRar.Close();
87 }
我更喜欢最快速简便的方法就是用批处理文件,编写内容如下:
@echo off
C:
cd "C:\Program Files\WinRAR"
rar.exe a -ag"-[YYYY-MM-DD-HH-MM-SS]" -m5 -inul -x*\bin\* -x*\bin -x*\obj\* -x*\obj "H:\My Project\Work\XXX2\xx.rar" "H:\My Project\XXx\xx"
但上面一切的操作的前提是必须安装WinRar,有兴趣的同仁可以自行完善界面和功能,可以举一反三实现zip,7z等格式。
-----------------------------------------------------------------------------
http://www.cnblogs.com/wintersun/
posted on
2008-08-23 18:04
PetterLiu
阅读(
2500)
评论()
编辑
收藏
举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了