今天做项目的时候遇到了这样一个需求:把多张表数据以.dat格式文件导出,多张表就会有多个.dat文件,想要把它们下载到客户端指定位置,就必须把它们放在一个文件夹中压缩下载。
通常解压缩文件有两种方法:使用GZip和使用WinRAR。前者是通过GZipStream类对文件(夹)进行解压缩,生成.zip格式的压缩文件,我不喜欢用这种方法的原因是它对文件(夹)有权限的要求,要么给目标文件(夹)添加一个NETWORK SERVICE 用户,要么设置应用池默认属性的标识为LocalService,否则会出现异常:对路径“xxx”的访问被拒绝。相对而言用WinRAR解压缩文件(夹)就省事多了,也比较好理解,就相当于对文件(夹)进行右键--压缩要“xxx.rar”操作。主要代码只有三行呢。
/// <summary>
/// 压缩文件(夹)
/// </summary>
/// <param name="rootPath">要压缩的目标文件(夹)的绝对路径,例:"G:\Sample\新建文件夹"</param>
/// <param name="filePath">压缩后文件存放目录,例:"G:\Sample\新建文件夹.rar"</param>
public void YaSuo(string rootPath,string filePath)
{
pro.StartInfo.FileName = @"G:\WinRAR.exe";//WinRAR.exe的绝对路径,例如G盘根目录
System.Diagnostics.Process pro = new System.Diagnostics.Process();
pro.StartInfo.Arguments = string.Format("a -ep {0} {1}", filePath, path);
pro.Start();
}
解压与之相似,相当于右键--解压到当前文件夹
/// <summary>
/// 解压文件(夹)
/// </summary>
/// <param name="filePath">待解压的.rar压缩文件绝对路径,例:"G:\Sample\新建文件夹.rar"</param>
/// <param name="savePath">解压后文件保存路径,例:"G:\Sample\"</param>
public void JieYa(string filePath, string savePath)
{
pro.StartInfo.FileName = @"G:\WinRAR.exe";//WinRAR.exe的绝对路径,例如G盘根目录
System.Diagnostics.Process pro = new System.Diagnostics.Process();
pro.StartInfo.Arguments = string.Format("X {0} {1}", filePath, savePath);
pro.Start();
}