/// <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