//解压缩 
        String the_rar;
        RegistryKey the_Reg;
        Object the_Obj;
        String the_Info;
        ProcessStartInfo the_StartInfo;
        Process the_Process;
        try
        {
            the_Reg = Registry.ClassesRoot.OpenSubKey("ApplicationsWinRar.exeShellOpenCommand");
            the_Obj = the_Reg.GetValue("");
            the_rar = the_Obj.ToString();
            the_Reg.Close();
            the_rar = the_rar.Substring(1, the_rar.Length - 7);
            the_Info = " X " + " 1.rar " + " " + "C:";
            the_StartInfo = new ProcessStartInfo();
            the_StartInfo.FileName = the_rar;
            the_StartInfo.Arguments = the_Info;
            the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            the_Process = new Process();
            the_Process.StartInfo = the_StartInfo;
            the_Process.Start();
            Response.Write("解压缩成功");
        }
        catch (Exception ex)
        {
            Response.Write(ex.ToString());
        }为什么在 服务器上解不了

解决方案 »

  1.   

    服务器上或许没有安装WinRAR的,可以用ICSharpCode库来解决,这是个开源的产品。1using System;
      2using System.Collections.Generic;
      3using System.Text;
      4using System.IO;
      5using ICSharpCode.SharpZipLib;
      6using ICSharpCode.SharpZipLib.Zip;
      7using ICSharpCode.SharpZipLib.Checksums;
      8
      9/**//*
     10 * 解压缩
     11 * 该程序压缩和解压配合才能使用
     12 * 普通用 Winrar 压缩的文件该解压不能通过
     13 * Modify By HJ 2007-10-25
     14 */ 
     15namespace ZipApplication
     16{
     17    /**//// <summary>
     18    /// 压缩类
     19    /// </summary>
     20    public class ZipClass
     21    {
     22        /**//// <summary>
     23        /// 递归压缩文件夹方法
     24        /// </summary>
     25        /// <param name="FolderToZip"></param>
     26        /// <param name="s"></param>
     27        /// <param name="ParentFolderName"></param>
     28        private static bool ZipFileDictory(string FolderToZip, ZipOutputStream s, string ParentFolderName)
     29        {
     30            bool res = true;
     31            string[] folders, filenames;
     32            ZipEntry entry = null;
     33            FileStream fs = null;
     34            Crc32 crc = new Crc32();
     35
     36            try
     37            {
     38
     39                //创建当前文件夹
     40                entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip) + "/"));  //加上 “/” 才会当成是文件夹创建
     41                s.PutNextEntry(entry);
     42                s.Flush();
     43
     44
     45                //先压缩文件,再递归压缩文件夹 
     46                filenames = Directory.GetFiles(FolderToZip);
     47                foreach (string file in filenames)
     48                {
     49                    //打开压缩文件
     50                    fs = File.OpenRead(file);
     51
     52                    byte[] buffer = new byte[fs.Length];
     53                    fs.Read(buffer, 0, buffer.Length);
     54                    entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip) + "/" + Path.GetFileName(file)));
     55
     56                    entry.DateTime = DateTime.Now;
     57                    entry.Size = fs.Length;
     58                    fs.Close();
     59
     60                    crc.Reset();
     61                    crc.Update(buffer);
     62
     63                    entry.Crc = crc.Value;
     64
     65                    s.PutNextEntry(entry);
     66
     67                    s.Write(buffer, 0, buffer.Length);
     68                }
     69            }
     70            catch
     71            {
     72                res = false;
     73            }
     74            finally
     75            {
     76                if (fs != null)
     77                {
     78                    fs.Close();
     79                    fs = null;
     80                }
     81                if (entry != null)
     82                {
     83                    entry = null;
     84                }
     85                GC.Collect();
     86                GC.Collect(1);
     87            }
     88
     89
     90            folders = Directory.GetDirectories(FolderToZip);
     91            foreach (string folder in folders)
     92            {
     93                if (!ZipFileDictory(folder, s, Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip))))
     94                {
     95                    return false;
     96                }
     97            }
     98
     99            return res;
    100        }
    101
    102        /**//// <summary>
    103        /// 压缩目录
    104        /// </summary>
    105        /// <param name="FolderToZip">待压缩的文件夹,全路径格式</param>
    106        /// <param name="ZipedFile">压缩后的文件名,全路径格式</param>
    107        /// <returns></returns>
    108        private static bool ZipFileDictory(string FolderToZip, string ZipedFile, String Password)
    109        {
    110            bool res;
    111            if (!Directory.Exists(FolderToZip))
    112            {
    113                return false;
    114            }
    115
    116            ZipOutputStream s = new ZipOutputStream(File.Create(ZipedFile));
    117            s.SetLevel(6);
    118            s.Password = Password;
    119
    120            res = ZipFileDictory(FolderToZip, s, "");
    121
    122            s.Finish();
    123            s.Close();
    124
    125            return res;
    126        }
    127
    128        /**//// <summary>
    129        /// 压缩文件
    130        /// </summary>
    131        /// <param name="FileToZip">要进行压缩的文件名</param>
    132        /// <param name="ZipedFile">压缩后生成的压缩文件名</param>
    133        /// <returns></returns>
    134        private static bool ZipFile(string FileToZip, string ZipedFile, String Password)
    135        {
    136            //如果文件没有找到,则报错
    137            if (!File.Exists(FileToZip))
    138            {
    139                throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
    140            }
    141            //FileStream fs = null;
    142            FileStream ZipFile = null;
    143            ZipOutputStream ZipStream = null;
    144            ZipEntry ZipEntry = null;
    145
    146            bool res = true;
    147            try
    148            {
    149                ZipFile = File.OpenRead(FileToZip);
    150                byte[] buffer = new byte[ZipFile.Length];
    151                ZipFile.Read(buffer, 0, buffer.Length);
    152                ZipFile.Close();
    153
    154                ZipFile = File.Create(ZipedFile);
    155                ZipStream = new ZipOutputStream(ZipFile);
    156                ZipStream.Password = Password;
    157                ZipEntry = new ZipEntry(Path.GetFileName(FileToZip));
    158                ZipStream.PutNextEntry(ZipEntry);
    159                ZipStream.SetLevel(6);
    160
    161                ZipStream.Write(buffer, 0, buffer.Length);
    162            }
    163            catch
    164            {
    165                res = false;
    166            }
    167            finally
    168            {
    169                if (ZipEntry != null)
    170                {
    171                    ZipEntry = null;
    172                }
    173                if (ZipStream != null)
    174                {
    175                    ZipStream.Finish();
    176                    ZipStream.Close();
    177                }
    178                if (ZipFile != null)
    179                {
    180                    ZipFile.Close();
    181                    ZipFile = null;
    182                }
    183                GC.Collect();
    184                GC.Collect(1);
    185            }
    186
    187            return res;
    188        }
    189
    190        /**//// <summary>
    191        /// 压缩文件 和 文件夹
    192        /// </summary>
    193        /// <param name="FileToZip">待压缩的文件或文件夹,全路径格式</param>
    194        /// <param name="ZipedFile">压缩后生成的压缩文件名,全路径格式</param>
    195        /// <returns></returns>
    196        public static bool Zip(String FileToZip, String ZipedFile, String Password)
    197        {
    198            if (Directory.Exists(FileToZip))
    199            {
    200                return ZipFileDictory(FileToZip, ZipedFile, Password);
    201            }
    202            else if (File.Exists(FileToZip))
    203            {
    204                return ZipFile(FileToZip, ZipedFile, Password);
    205            }
    206            else
    207            {
    208                return false;
    209            }
    210        }
    211    }
    212
      

  2.   

    /**//// <summary>
        ///  解压类
        /// </summary>
        public class UnZipClass
        {
            /**//// <summary>
            /// 解压功能(解压压缩文件到指定目录)
            /// </summary>
            /// <param name="FileToUpZip">待解压的文件</param>
            /// <param name="ZipedFolder">指定解压目标目录</param>
            public static void UnZip(string FileToUpZip, string ZipedFolder,string Password)
            {
                if (!File.Exists(FileToUpZip))
                {
                    return;
                }            if (!Directory.Exists(ZipedFolder))
                {
                    Directory.CreateDirectory(ZipedFolder);
                }            ZipInputStream s = null;
                ZipEntry theEntry = null;            string fileName;
                FileStream streamWriter = null;
                try
                {
                    s = new ZipInputStream(File.OpenRead(FileToUpZip));
                    s.Password = Password;
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        if (theEntry.Name != String.Empty)
                        {
                            fileName = Path.Combine(ZipedFolder, theEntry.Name);
                            /**////判断文件路径是否是文件夹
                            if (fileName.EndsWith("/") || fileName.EndsWith("\\"))
                            {
                                Directory.CreateDirectory(fileName);
                                continue;
                            }                        streamWriter = File.Create(fileName);
                            int size = 2048;
                            byte[] data = new byte[2048];
                            while (true)
                            {
                                size = s.Read(data, 0, data.Length);
                                if (size > 0)
                                {
                                    streamWriter.Write(data, 0, size);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
                finally
                {
                    if (streamWriter != null)
                    {
                        streamWriter.Close();
                        streamWriter = null;
                    }
                    if (theEntry != null)
                    {
                        theEntry = null;
                    }
                    if (s != null)
                    {
                        s.Close();
                        s = null;
                    }
                    GC.Collect();
                    GC.Collect(1);
                }
            }
        }
    }
      

  3.   

    不知道你有没有MSN可以加我吗.帮我说一下你的解压过程.
    MSN [email protected]