请问用c#采用那种方式打包文件最方便最好带有目录结构SevenZipSharp?或者其他的什么?

解决方案 »

  1.   

    这个问题要看你在什么平台上了,如果是Windows平台,可以考虑使用WinRar,兼容性和稳定性更好一些(当然可能比较贵一些)
    下面是我写的一个解压缩和压缩的类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
        }
    }