解压zip文件
/// <summary>
/// 执行压缩命令结果
/// </summary>
public enum CompressResults
{
Success,
SourceObjectNotExist,
UnKnown
} /// <summary>
/// 执行解压缩命令结果
/// </summary>
public enum UnCompressResults
{
Success,
SourceObjectNotExist,
PasswordError,
UnKnown
}
/// <summary>
/// 进程运行结果
/// </summary>
//public enum ProcessResults
//{
// Success,
// Failed
//}
public class ZipOperate
{
#region 单例模式 private static ZipOperate uniqueInstance;
private static object _lock = new object(); //private ZipOperate() { }
public static ZipOperate getInstance()
{
if (null == uniqueInstance) //确认要实例化后再进行加锁,降低加锁的性能消耗。
{
lock (_lock)
{
if (null == uniqueInstance)
{
uniqueInstance = new ZipOperate();
}
}
}
return uniqueInstance;
} #endregion #region 7zZip压缩、解压方法
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="objectPathName">压缩对象(即可以是文件夹|也可以是文件)</param>
/// <param name="objectZipPathName">保存压缩文件的路径</param>
/// <param name="strPassword">加密码</param>
/// 测试压缩文件夹:压缩文件(objectZipPathName)不能放在被压缩文件(objectPathName)内,否则报“文件夹被另一进程使用中”错误。
/// <returns></returns>
public CompressResults Compress7zZip(String objectPathName, String objectZipPathName, String strPassword)
{
try
{
//http://sevenzipsharp.codeplex.com/releases/view/51254 下载sevenzipsharp.dll
//SevenZipSharp.dll、zLib1.dll、7z.dll必须同时存在,否则常报“加载7z.dll错误”
string libPath = @"E:\yingyong\Uncompress_7zip\Uncompress_7zip\bin\Debug\7z.dll";//System.AppDomain.CurrentDomain.BaseDirectory + @"..\..\dll\7z.dll";
SevenZipCompressor.SetLibraryPath(libPath);
SevenZipCompressor sevenZipCompressor = new SevenZipCompressor();
sevenZipCompressor.CompressionLevel = CompressionLevel.Fast;
sevenZipCompressor.ArchiveFormat = OutArchiveFormat.Zip; //被压缩对象是否存在
int beforeObjectNameIndex = objectPathName.LastIndexOf('\\');
string objectPath = objectPathName.Substring(, beforeObjectNameIndex);
//System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(objectPathName);
if (Directory.Exists(objectPathName)/*directoryInfo.Exists*/ == false && System.IO.File.Exists(objectPathName) == false)
{
return CompressResults.SourceObjectNotExist;
}
int beforeObjectRarNameIndex = objectZipPathName.LastIndexOf('\\');
int objectRarNameIndex = beforeObjectRarNameIndex + ;
//string objectZipName = objectZipPathName.Substring(objectRarNameIndex);
string objectZipPath = objectZipPathName.Substring(, beforeObjectRarNameIndex);
//目标目录、文件是否存在
if (Directory.Exists(objectZipPath) == false)
{
Directory.CreateDirectory(objectZipPath);
}
else if (File.Exists(objectZipPathName) == true)
{
File.Delete(objectZipPathName);
} if (Directory.Exists(objectPathName)) //压缩对象是文件夹
{
if (String.IsNullOrEmpty(strPassword))
{
sevenZipCompressor.CompressDirectory(objectPathName, objectZipPathName);
}
else
{
sevenZipCompressor.CompressDirectory(objectPathName, objectZipPathName, strPassword);
}
}
else //压缩对象是文件 无加密方式
{
sevenZipCompressor.CompressFiles(objectZipPathName, objectPathName);
} return CompressResults.Success;
}
catch (Exception ex)
{
//throw new Exception(ex.Message) ;
return CompressResults.UnKnown;
}
} /// <summary>
/// 解压缩文件
/// </summary>
/// <param name="zipFilePathName">zip文件具体路径+名</param>
/// <param name="unCompressDir">解压路径</param>
/// <param name="strPassword">解密码</param>
/// <returns></returns>
public UnCompressResults UnCompress7zZip(String zipFilePathName, String unCompressDir, String strPassword)
{
try
{
//SevenZipSharp.dll、zLib1.dll、7z.dll必须同时存在,否则常报“加载7z.dll错误”而项目引用时,只引用SevenZipSharp.dll就可以了
//string libPath = System.AppDomain.CurrentDomain.BaseDirectory + @"..\..\7z.dll";
string libPath = "7z.dll";
SevenZip.SevenZipCompressor.SetLibraryPath(libPath); bool isFileExist = File.Exists(zipFilePathName);
if (false == isFileExist)
{
//MessageBox.Show("解压文件不存在!" + zipFilePathName);
return UnCompressResults.SourceObjectNotExist;
}
File.SetAttributes(zipFilePathName, FileAttributes.Normal); //去掉只读属性 if (Directory.Exists(unCompressDir) == false)
{
Directory.CreateDirectory(unCompressDir);
} SevenZip.SevenZipExtractor sevenZipExtractor;
if (String.IsNullOrEmpty(strPassword))
{
sevenZipExtractor = new SevenZip.SevenZipExtractor(zipFilePathName);
}
else
{
sevenZipExtractor = new SevenZip.SevenZipExtractor(zipFilePathName, strPassword);
} sevenZipExtractor.ExtractArchive(unCompressDir);
sevenZipExtractor.Dispose();
return UnCompressResults.Success;
}
catch (Exception ex)
{
//MessageBox.Show("解压缩文件失败!" + ex.Message);
return UnCompressResults.UnKnown;
}
}
#endregion
}
此方法需要引用sevenzipsharp.dll,同时在需要zlib1.dll和7z.dll两个库,这两个不需要引用,但是要跟sevenzipsharp.dll放在同一个文件夹下。
注:代码中
string libPath=... 要改为string libPath =“7z.dll“,或者为:”
string libPath =Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,“7z.dll”);
解压zip文件的更多相关文章
- 通过javascript在网页端解压zip文件并查看压缩包内容
WEB前端解压ZIP压缩包 web前端解压zip文件有什么用: 只考虑标准浏览器的话, 服务器只要传输压缩包到客户端, 节约了带宽, 而且节约了传输时间, 听起来好像很厉害的说: 如果前端的代 ...
- Android 解压zip文件(支持中文)
过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...
- (转载)C#压缩解压zip 文件
转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...
- Android 解压zip文件你知道多少?
对于Android常用的压缩格式ZIP,你了解多少? Android的有两种解压ZIP的方法,你知道吗? ZipFile和ZipInputStream的解压效率,你对比过吗? 带着以上问题,现在就开始 ...
- java实现解压zip文件,(亲测可用)!!!!!!
项目结构: Util.java内容: package com.cfets.demo; import java.io.File; import java.io.FileOutputStream; imp ...
- Android 解压zip文件
过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...
- python用zipfile模块打包文件或是目录、解压zip文件实例
#!/usr/bin/env python # -*- coding: utf-8 -*- from zipfile import * import zipfile #解压zip文件 def unzi ...
- AIX解压ZIP文件
AIX系统自身是没有解压ZIP文件的,但在AIX安装oracle数据库服务器的话,在$ORACLE_HOME/bin路径下方却有unzip命令,可以解压ZIP文件. 一.shell脚本 之前的版本 ...
- linux 解压zip文件
linux 解压zip文件 学习了:https://blog.csdn.net/hbcui1984/article/details/1583796 unzip xx.zip
- Java 上传解压zip文件,并且解析文件里面的excel和图片
需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中. PS:为了方便不同水平的开发人员阅读 ...
随机推荐
- alpha测试和beta测试的区别
alpha测试版,有点相当于内部测试,一般开发人员在场 ,是由用户做测试,但开发人员在场,一般是请用户到开发现场去测试 beta测试版,完全交给用户,由用户做测试,返回测试报告,相当于发行前的一 ...
- dependencies 与 dependencyManagement 区别
dependencies 即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)dependencyManagement 里只是声明依赖,并不实现引入,因此子项目需要显示的声明 ...
- playframe 项目搭建
- (三)分布式数据库tidb-隔离级别详解
tidb隔离级别详解: 1.TiDB 支持的隔离级别是 Snapshot Isolation(SI),它和 Repeatable Read(RR) 隔离级别基本等价,详细情况如下: ● TiDB 的 ...
- 一个网站完整的SEO优化方案,方法,怎么做seo优化?
SEO优化主要分为站内优化,站外优化.如果非得说一套完整的SEO优化方案,那就是需要4名专业人员:前端人员,内容编辑,网络推广人员,和数据分析人员.那以下就详细介绍这四个岗位各自负责的工作有哪些: 一 ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理三 (二十一)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- [Git] Git 使用记录
1. 配置git客户端 1.1 安装git bash https://git-scm.com/downloads 1.2 设置ssh Key 查看是否有ssh key ls -al ~/.ssh 没有 ...
- vue多级复杂列表展开/折叠,全选/分组全选实现
首先,来看下效果图 在线体验地址:https://hxkj.vip/demo/multipleList/.温馨提示,打开之后按F12,使用手机模式食用,口味更佳! 可以看出,这个列表有三种展现形式: ...
- web前端体系-了解前端,深入前端,架构前端,再看前端。大体系-知识-小细节
1.了解前端,深入前端,架构前端,再看前端.大体系-知识-小细节 个人认为:前端发展最终的导向是前端工程化,智能化,模块化,组件化,层次化. 2.面试第一关:理论知识. 2-1.http标准 2-2. ...
- SystemVerilog Assertion 设计、调试、测试总结(2)
上一篇博客主要写了SVA的基本语法(详细),这一篇主要写SVA语法总结,以及如何查看SVA波形等. 断言assertion被放在verilog设计中,方便在仿真时查看异常情况.当异常出现时,断言会报警 ...