请问用c#采用那种方式打包文件最方便最好带有目录结构SevenZipSharp?或者其他的什么?
解决方案 »
- C# 怎么阻止右键菜单弹出?
- 在未安装VS2005的机器上调用C++程序 ,急急!
- .NET的自定义控件使用泛型后不能用设计器设计,有没有好的解决办法?
- mytable.Rows.Add怎么加rows???
- Socket 新人求助,现在已经正在使用此 SocketAsyncEventArgs 实例进行异步套接字操作
- 多维数据的遍历方法求问。。
- 如何根据字符创长度控制table(一行一列)的宽度?
- System.Threading.Timer 执行完当前任务再进行下一个任务
- 如何用代码设置TextBox位置并显示。
- 更新索引的耗时问题--大侠帮忙啊!
- picturebox加载图片的问题,在线等,解决就结贴
- 关于构造函数重载如何代码重用的问题
下面是我写的一个解压缩和压缩的类using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;namespace Geoway.HJDMS.Service.Util
{
public class Decompression
{ /// <summary>
/// 解压缩对象初始化
/// </summary>
/// <param name="winrarPath"></param>
/// <param name="decompressionCommand"></param>
public Decompression(string winrarPath, string decompressionCommand)
{
_decompressionCommand = decompressionCommand;
_winrarPath = winrarPath;
}
/// <summary>
/// 解压缩对象初始化
/// </summary>
/// <param name="winrarPath"></param>
public Decompression(string winrarPath)
{
_decompressionCommand = " e -ad -y ";
_winrarPath = winrarPath;
} #region 私有变量
private string _decompressionCommand;
private string _winrarPath;
private int _exitNum;
#endregion #region 私有函数
private void KillWinRar()
{
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
if (process.ProcessName == "WinRAR")
{
process.Kill();
}
}
}
private string GetExitInfoByCode(int exitCode)
{
string result = string.Empty;
switch (exitCode)
{
case 0:
result = "成功操作";
break;
case 1:
result = "警告,发生非致命错误";
break;
case 2:
result = "发生致命错误";
break;
case 3:
result = "解压时发生CRC 错误";
break;
case 4:
result = "尝试修改一个锁定的压缩文件";
break;
case 5:
result = "写错误";
break;
case 6:
result = "文件打开错误";
break;
case 7:
result = "错误命令行选项";
break;
case 8:
result = "内存不足";
break;
case 9:
result = "文件创建错误";
break;
case 255:
result = "用户中断";
break;
default:
break;
}
return result;
}
#endregion #region 外部接口
/// <summary>
/// 解压缩文件
/// </summary>
/// <param name="targetFileFullName"></param>
/// <param name="destFolderPath"></param>
/// <param name="formatOption"></param>
/// <returns></returns>
public bool Extract(string targetFileFullName, string destFolderPath, string formatOption)
{
bool Result = false;
try
{
string cmd = string.Format(_decompressionCommand + " {0} {1} {2} ", targetFileFullName, formatOption, destFolderPath);
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = _winrarPath;
startInfo.Arguments = cmd;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.WorkingDirectory = Path.GetDirectoryName(targetFileFullName);
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
_exitNum = process.ExitCode;
if (_exitNum == 0)
{
Result = true;
}
process.Close();
KillWinRar();
}
catch
{
return Result;
}
return Result;
}
/// <summary>
/// 压缩文件夹
/// </summary>
/// <param name="targetFileFullName"></param>
/// <param name="destFolderPath"></param>
/// <param name="compressCommand"></param>
/// <returns></returns>
public bool Compress(string targetFileFullName, string destFolderPath,string compressCommand)
{
bool Result = false;
try
{
string cmd = string.Format(compressCommand + " {0} {1} ", targetFileFullName, destFolderPath);
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = _winrarPath;
startInfo.Arguments = cmd;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.WorkingDirectory = Path.GetDirectoryName(targetFileFullName);
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
_exitNum = process.ExitCode;
if (_exitNum == 0)
{
Result = true;
}
process.Close();
KillWinRar();
}
catch
{
return Result;
}
return Result;
}
/// <summary>
/// 获取解压缩结果
/// </summary>
/// <returns></returns>
public string GetExitInfo()
{
string exitInfo = GetExitInfoByCode(_exitNum);
return exitInfo;
}
#endregion
}
}