/// <summary>
/// 解压压缩文件到指定目录
/// <param name="zipFilePath">压缩文件路径</param>
/// <summary>
/// <returns></returns>
public void MuliteImport(string zipFilePath)
{
//解压文件存放路径
    string unZipDir = string.Format("{0}/{1}/{2}/{3}", Config.GetValue("AnnexesFile"), "Decompress", LoginUserInfo.Get().userId, DateTime.Now.ToString("yyyyMMdd"));
    string FileEextension = Path.GetExtension(zipFilePath);//文件名后缀
//如果解压目录不存在则创建
    if (!Directory.Exists(unZipDir))
    {
        Directory.CreateDirectory(unZipDir);
    }
    if (FileEextension.ToLower() == ".zip")
    {
        Decompress(unZipDir, zipFilePath);
    }
    else if (FileEextension.ToLower() == ".rar")
    {
        DeCompressRar(unZipDir, zipFilePath);
    }
}
#region 解压缩文件
/// <summary>
/// 解压zip格式的文件(在工程中引用SharpZipLib)
/// </summary>
/// <param name="unZipDir">解压文件存放路径</param>
/// <param name="zipFilePath">压缩文件路径</param>
/// <returns></returns>
public void Decompress(string unZipDir, string zipFilePath)
{
    unZipDir = unZipDir + "/zip";
    if (!Directory.Exists(unZipDir))
        Directory.CreateDirectory(unZipDir);//生成解压目录
    byte[] data = new byte[2048];
    int size = 2048;
//一个ZIP文件中的条目,可以理解为压缩包里面的一个文件夹/文件
    ZipEntry theEntry = null;
//解压缩输出流,从压缩包中一个接一个的读出文档。
    using (ZipInputStream inputStream = new ZipInputStream(File.OpenRead(zipFilePath)))
    {
        while ((theEntry = inputStream.GetNextEntry()) != null)
        {
            if (!string.IsNullOrEmpty(theEntry.Name))
            {
                string fileName = Path.Combine(unZipDir, theEntry.Name);
                fileName = fileName.Replace('/', '\\');
                if (fileName.EndsWith("\\"))
                {
                    Directory.CreateDirectory(fileName);
                    ec_library_catalogueEntity catalogue = new ec_library_catalogueEntity();
                    continue;
                }
                using (FileStream streamWriter = File.Create(fileName))
                {
                    while (true)
                    {
                        size = inputStream.Read(data, 0, data.Length);
                        if (size <= 0) break;
                        streamWriter.Write(data, 0, size);
                    }
                    streamWriter.Close();
                }
            }
        }
        inputStream.Close();
    }
}
/// <summary>
/// 获取winrar的安装位置
/// </summary>
/// <returns></returns>
public static string ExistsWinRar()
{
    string result = string.Empty;
    string key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe";
    RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(key);
    if (registryKey != null)
    {
        result = registryKey.GetValue("").ToString();
        registryKey.Close();
    }
    return result;
}
/// <summary>
/// 将格式为rar的压缩文件解压到指定的目录(本机必须安装winrar解压软件)
/// </summary>
/// <param name="unZipDir">解压后要保存到的目录</param>
/// <param name="zipFilePath">要解压rar文件的路径</param>
/// <returns></returns>
public void DeCompressRar(string unZipDir, string zipFilePath)
{
    var Compressfiles = new List<FileInfo>();
    string winrarPath = ExistsWinRar();
    if (!string.IsNullOrEmpty(winrarPath))
    {
        unZipDir = unZipDir + "/rar";
        if (!Directory.Exists(unZipDir))
            Directory.CreateDirectory(unZipDir);//生成解压目录
        string winrarDir = Path.GetDirectoryName(winrarPath);
        string commandOptions = string.Format("x {0} {1} -y", zipFilePath, unZipDir);
        ProcessStartInfo processStartInfo = new ProcessStartInfo();
        processStartInfo.FileName = Path.Combine(winrarDir, "rar.exe");
        processStartInfo.Arguments = commandOptions;
        processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        Process process = new Process();
        process.StartInfo = processStartInfo;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.CreateNoWindow = true;
        process.Start();
        var files = 0;
        while (process.HasExited)
        {
            files++;
        }
        process.WaitForExit();
        process.Close();
        var dir = new DirectoryInfo(unZipDir);
        FindFile(dir, Compressfiles);
    }
    else
    {
//message = "请先安装winrar程序,再上传文件";
    }
}
//查找所有文件
public void FindFile(DirectoryInfo di, List<FileInfo> files)
{
    FileInfo[] fis = di.GetFiles();
    files.AddRange(fis);
    DirectoryInfo[] dis = di.GetDirectories();
    for (int j = 0; j < dis.Length; j++)
    {
        FindFile(dis[j], files);
    }
}
#endregion