办事面临正好完结一个xx监控服务的出任务,才疏学浅,仅仅是概括的实现,现在本着出中相遇的几乎独问题做一下整治。

一个凡是应用XML文件记录任务信息,XML文件精简清晰、生成和分析操作方便,但是会干到文件越来越深之景况:

  • C# –
    操作大型XML文件;

此外一个凡文本进一步深,占用存储空间,涉及压缩存储的题材,本文对文件减少的几栽方法作简单总结。

考虑最老压缩比,将文件减少成 .7z 格式。

7z.exe

有关工具下载:http://www.cnblogs.com/rentiansheng/archive/2011/09/15/2177716.html

要用7z.dll、7z.exe、7zFM.exe、7zG.exe放入到工程项目的履行目录下。

XML 1XML 2

 1 public class SevenZipHelper
 2     {
 3         /// 7z.exe启动路径
 4         private static string _InstallPath_7zip;
 5 
 6         /// startDirectory:执行目录
 7         public static void Init(string startDirectory)
 8         {
 9             _InstallPath_7zip = startDirectory + "\\7z.exe";
10         }
11 
12         /// 压缩、解压缩辅助调用函数
13         /// <param name="Arguments">待执行命令</param>
14         private static bool CompressHelper(string Arguments)
15         {
16             using (Process process = new Process())
17             {
18                 try
19                 {                   
20                     process.StartInfo.FileName = _InstallPath_7zip; // 待启动进程名称                   
21                     process.StartInfo.Arguments = Arguments;        // 命令配置                   
22                     process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏DOS窗口
23                     process.Start(); 
24                     process.WaitForExit();                     
25                     process.Close();
26                 }
27                 catch (Exception ex)
28                 {
29                     Logger.LogWarn(null, ex.Message);
30                     return false;
31                 }
32                 return true;
33             }
34         }
35 
36         /// 压缩文件
37         /// <param name="InFilePath">待压缩文件路径</param>
38         /// <param name="OutZipFilePath">压缩文件输出路径</param>
39         string _Arguments = "a -t7z " + "\"" + OutZipFilePath + "\"" + " " + "\"" + InFilePath + "\"" + "";
40         
41         /// 压缩文件夹
42         /// <param name="InDirectory">待压缩文件夹</param>
43         /// <param name="OutZipFilePath">压缩文件输出路径</param>
44         string _Arguments = "a -t7z " + "\"" + OutZipFilePath + "\"" + " " + "\"" + InDirectory + "\"" + " -r";
45 
46         
47         /// 压缩多个文件
48         /// <param name="FileDirectory">待压缩文件所在目录</param>
49         /// <param name="InFileNames">待压缩文件名字</param>
50         /// <param name="OutZipFilePath">压缩文件输出路径</param>
51         string _Arguments = string.Empty;
52         foreach (string inFileName in InFileNames)
53         {
54             string inFilePath = FileDirectory + inFileName;
55             _Arguments = "a -t7z " + "\"" + OutZipFilePath + "\"" + " " + "\"" + inFilePath + "\"" + "";
56         }
57         
58         /// 压缩多个文件夹 同理 压缩多个文件
59         
60         /// 解压缩
61         /// </summary>
62         /// <param name="InZipFilePath">压缩文件路径</param>
63         /// <param name="OutDirectory">解压缩后文件输出目录</param>
64         string _Arguments = " x " + "\"" + InZipFilePath + "\"" + " -o" + "\"" + OutDirectory + "\"" + " -r ";            
65     }

SevenZipHelper

专注其中几只问题:

  •  路径最好不用含空格;若含空格,应该加引号:“\”” + strPath + “\””
  •  解压缩中,-o代表输出目录,其同目录路径之间从未空格
  •  解压既可输出到当前目录,也得以输出到指定文件夹,只要改变
    OutDirectory 即可

参考

  •  7-Zip 官方中文主页;
  •  一声令下行压缩解压7z;

SevenZipSharp.dll

SevenZipSharpXML是Codeplex的开源项目,使用7-zip的library,需要7z.dll暨SevenZipSharp.dll,网上一直下载即可。

  • SevenZipSharp.dll需要添加引用;
  • 7z.dll无法直接引用,需要指定其路径;

XML 3XML 4

 1 using SevenZip;
 2 
 3 public static void CompressWithSevenZipCompressor(string FilePath, string zipFilepath)
 4 {
 5     // 7z.dll不能直接引用,必须指定路径
 6     SevenZipCompressor.SetLibraryPath("7z.dll");
 7     var zip = new SevenZipCompressor();
 8     zip.CompressionLevel = CompressionLevel.High;  // 压缩比
 9     zip.ArchiveFormat = OutArchiveFormat.SevenZip; // 压缩格式
10     // zip.CompressionMethod = SevenZip.CompressionMethod.Lzma;  // 压缩算法
11     // zip.CompressionMode = SevenZip.CompressionMode.Create;    // 压缩模式
12     // zip.ZipEncryptionMethod = SevenZip.ZipEncryptionMethod.Aes256;  // 压缩加密算法
13 
14             
15     // 普通压缩方法:文件带有文件夹,使用不方便
16     zip.CompressFiles(zipFilepath, FilePath);  
17     // 字典集压缩方法:推荐
18     Dictionary<string, string> myDic = new Dictionary<string, string>();
19     myDic.Add(FileName, FilePath);
20     zip.CompressFileDictionary(myDic, zipFilepath);
21 }

SevenZipCompressor

设若压缩多独文本,传参 List<string> FilePaths 即可。

 


本文仅简简单单介绍上述2种植方法,7z.exe主意减速度比快

另外可参考:【原创】.NET开源压缩组件介绍和入门;

相关文章

网站地图xml地图