C#中用ICSharmatlab pcodee.SharpZipLib.dll解压缩ZIP文件,如何可以获取要解压的ZIP文件内最外层包含几个目录

请问如果通过SharpZipLib读取一个压缩包内的文件内容
[问题点数:100分,结帖人sftl25789]
请问如果通过SharpZipLib读取一个压缩包内的文件内容
[问题点数:100分,结帖人sftl25789]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2012年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2012年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2012年5月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2012年3月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2012年2月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2012年1月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2011年11月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2011年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2011年4月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2011年3月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2010年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2010年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2010年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2010年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2010年5月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2010年3月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2010年2月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2009年12月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2009年11月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2009年10月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一2009年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第一
2012年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2012年4月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2011年12月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2011年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2011年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2011年6月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2011年5月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年11月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年10月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年4月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2010年1月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2009年9月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2009年8月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二2009年7月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。C#中用ICSharpCode.SharpZipLib.dll解压缩ZIP文件,如何可以获取要解压的ZIP文件内最外层包含几个目录_百度知道
C#中用ICSharpCode.SharpZipLib.dll解压缩ZIP文件,如何可以获取要解压的ZIP文件内最外层包含几个目录
如何可以获取要解压的ZIP文件内最外层包含几个目录C#中用ICSharpCode.dll解压缩ZIP文件.SharpZipLib
提问者采纳
好好看看SharpZipLib的文档,这个开源库非常棒,还有编程提示,一目了然
提问者评价
其他类似问题
为您推荐:
zip文件的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁怎样批量查找大量zip包里有无某个文件?例如,我想知道一批zip文件里面是否包含有文件:readme.txt,有则返回1,否则返回0。希望能满足批量查询。zip包有如下特点:1、zip文件名中包含中文、空格,而且是长文件名;2、zip包里有多个目录;我知道可以通过zlib的某个函数来完成,就是不知道是哪个。谢谢老师们!还有,听说用SharpZipLib.dll也行,c#如下,不知vb怎么写?using (ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) {ZipEntry theEwhile ((theEntry = s.GetNextEntry()) != null) {
if(FileName==theEntry.Name)
{}}}要用到ICSharpCode.SharpZipLib.dll
我还知道,有位高手了一个QuickZIP,用的还是ICSharpCode.SharpZipLib.dll,可以简单的使用。http://blog.csdn.net/ZIP_xG/archive//5761592.aspx
--------------------------------------
来往的人不少啊,没人关注,顶上去。这两个类是从网上找来的,修改了一下,改为自己所需要的,测试通过.压缩后的文件为.zip
感觉还不错,所以转载一下与大家共享
/// &summary&
&/// 压缩文件
&/// &/summary&
using System.IO;
using ICSharpCode.SharpZipLib.C
using ICSharpCode.SharpZipLib.Z
using ICSharpCode.SharpZipLib.GZ
namespace FtpResume.Utility
&&& public class ZipClass
&&&&&&& public string cutStr = &&;
&&&&&&& public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel,
int BlockSize)
&&&&&&&&&&& //如果文件没有找到则报错。
&&&&&&&&&&& if (!System.IO.File.Exists(FileToZip))
&&&&&&&&&&& {
&&&&&&&&&&&&&&& throw new System.IO.FileNotFoundException(&The specified file & + FileToZip + & could not be found. Zipping aborderd&);
&&&&&&&&&&& }
&&&&&&&&&&& System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip,
System.IO.FileMode.Open, System.IO.FileAccess.Read);
&&&&&&&&&&& System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
&&&&&&&&&&& ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
&&&&&&&&&&& ZipEntry ZipEntry = new ZipEntry(&ZippedFile&);
&&&&&&&&&&& ZipStream.PutNextEntry(ZipEntry);
&&&&&&&&&&& ZipStream.SetLevel(CompressionLevel);
&&&&&&&&&&& byte[] buffer = new byte[BlockSize];
&&&&&&&&&&& System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);
&&&&&&&&&&& ZipStream.Write(buffer, 0, size);
&&&&&&&&&&& try
&&&&&&&&&&& {
&&&&&&&&&&&&&&& while (size & StreamToZip.Length)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
&&&&&&&&&&&&&&&&&&& ZipStream.Write(buffer, 0, sizeRead);
&&&&&&&&&&&&&&&&&&& size += sizeR
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&&&&&& catch (System.Exception ex)
&&&&&&&&&&& {
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& ZipStream.Finish();
&&&&&&&&&&& ZipStream.Close();
&&&&&&&&&&& StreamToZip.Close();
&&&&&&& //Get all DirectoryInfo
&&&&&&& private void direct(DirectoryInfo di, ref ZipOutputStream s, Crc32 crc)
&&&&&&&&&&& //DirectoryInfo di = new DirectoryInfo(filenames);
&&&&&&&&&&& DirectoryInfo[] dirs = di.GetDirectories(&*&);
&&&&&&&&&&& //遍历目录下面的所有的子目录
&&&&&&&&&&& foreach (DirectoryInfo dirNext in dirs)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& //将该目录下的所有文件添加到 ZipOutputStream s 压缩流里面
&&&&&&&&&&&&&&& FileInfo[] a = dirNext.GetFiles();
&&&&&&&&&&&&&&& this.writeStream(ref s, a, crc);
&&&&&&&&&&&&&&& //递归调用直到把所有的目录遍历完成
&&&&&&&&&&&&&&& direct(dirNext, ref s, crc);
&&&&&&&&&&& }
&&&&&&& private void writeStream(ref ZipOutputStream s, FileInfo[] a, Crc32 crc)
&&&&&&&&&&& foreach (FileInfo fi in a)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& //string fifn = fi.FullN
&&&&&&&&&&&&&&& FileStream fs = fi.OpenRead();
&&&&&&&&&&&&&&& byte[] buffer = new byte[fs.Length];
&&&&&&&&&&&&&&& fs.Read(buffer, 0, buffer.Length);
&&&&&&&&&&&&&&& //ZipEntry entry = new ZipEntry(file);&&& Path.GetFileName(file)
&&&&&&&&&&&&&&& string file = fi.FullN
&&&&&&&&&&&&&&& file = file.Replace(cutStr, &&);
&&&&&&&&&&&&&&& ZipEntry entry = new ZipEntry(file);
&&&&&&&&&&&&&&& entry.DateTime = DateTime.N
&&&&&&&&&&&&&&& // set Size and the crc, because the information
&&&&&&&&&&&&&&& // about the size and crc should be stored in the header
&&&&&&&&&&&&&&& // if it is not set it is automatically written in the footer.
&&&&&&&&&&&&&&& // (in this case size == crc == -1 in the header)
&&&&&&&&&&&&&&& // Some ZIP programs have problems with zip files that don't store
&&&&&&&&&&&&&&& // the size and crc in the header.
&&&&&&&&&&&&&&& entry.Size = fs.L
&&&&&&&&&&&&&&& fs.Close();
&&&&&&&&&&&&&&& crc.Reset();
&&&&&&&&&&&&&&& crc.Update(buffer);
&&&&&&&&&&&&&&& entry.Crc = crc.V
&&&&&&&&&&&&&&& s.PutNextEntry(entry);
&&&&&&&&&&&&&&& s.Write(buffer, 0, buffer.Length);
&&&&&&&&&&& }
&&&&&&& /// &summary&
&&&&&&& /// 压缩指定目录下指定文件(包括子目录下的文件)
&&&&&&& /// &/summary&
&&&&&&& /// &param name=&zippath&&args[0]为你要压缩的目录所在的路径&
&&&&&&& /// 例如:D:\\temp\\&& (注意temp 后面加 \\ 但是你写程序的时候怎么修改都可以)&/param&
&&&&&&& /// &param name=&zipfilename&&args[1]为压缩后的文件名及其路径
&&&&&&& /// 例如:D:\\temp.zip&/param&
&&&&&&& /// &param name=&fileFilter&&文件过滤, 例如*.xml,这样只压缩.xml文件.&/param&
&&&&&&& ///
&&&&&&& public bool ZipFileMain(string zippath, string zipfilename, string fileFilter)
&&&&&&&&&&& try
&&&&&&&&&&& {
&&&&&&&&&&&&&&& //string filenames = Directory.GetFiles(args[0]);
&&&&&&&&&&&&&&& Crc32 crc = new Crc32();
&&&&&&&&&&&&&&& ZipOutputStream s = new ZipOutputStream(File.Create(zipfilename));
&&&&&&&&&&&&&&& s.SetLevel(6); // 0 - store only to 9 - means best compression
&&&&&&&&&&&&&&& DirectoryInfo di = new DirectoryInfo(zippath);
&&&&&&&&&&&&&&& FileInfo[] a = di.GetFiles(fileFilter);
&&&&&&&&&&&&&&& cutStr = zippath.Trim();
&&&&&&&&&&&&&&& //压缩这个目录下的所有文件
&&&&&&&&&&&&&&& writeStream(ref s, a, crc);
&&&&&&&&&&&&&&& //压缩这个目录下子目录及其文件
&&&&&&&&&&&&&&& direct(di, ref s, crc);
&&&&&&&&&&&&&&& s.Finish();
&&&&&&&&&&&&&&& s.Close();
&&&&&&&&&&& }
&&&&&&&&&&& catch
&&&&&&&&&&& {
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&&
///&summary&
///解压缩文件
///&/summary&
using System.T
using System.C
using System.IO;
using System.D
using System.Runtime.Serialization.Formatters.B
using System.D
using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.Z
using ICSharpCode.
using ICSharpCode.pression.S
using ICSharpCode.SharpZipLib.GZ
namespace FtpResume.Utility
&&& public class UnZipClass
&&&&&&& /// &summary&
&&&&&&& /// 解压缩文件(压缩文件中含有子目录)
&&&&&&& /// &/summary&
&&&&&&& /// &param name=&zipfilepath&&待解压缩的文件路径&/param&
&&&&&&& /// &param name=&unzippath&&解压缩到指定目录&/param&
&&&&&&& public void UnZip(string zipfilepath, string unzippath)
&&&&&&&&&&& ZipInputStream s = new ZipInputStream(File.OpenRead(zipfilepath));
&&&&&&&&&&& ZipEntry theE
&&&&&&&&&&& while ((theEntry = s.GetNextEntry()) != null)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& string directoryName = Path.GetDirectoryName(unzippath);
&&&&&&&&&&&&&&& string fileName = Path.GetFileName(theEntry.Name);
&&&&&&&&&&&&&&& //生成解压目录
&&&&&&&&&&&&&&& Directory.CreateDirectory(directoryName);
&&&&&&&&&&&&&&& if (fileName != String.Empty)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& //如果文件的压缩后大小为0那么说明这个文件是空的,因此不需要进行读出写入
&&&&&&&&&&&&&&&&&&& if (pressedSize == 0)
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&& //解压文件到指定的目录
&&&&&&&&&&&&&&&&&&& directoryName = Path.GetDirectoryName(unzippath + theEntry.Name);
&&&&&&&&&&&&&&&&&&& //建立下面的目录和子目录
&&&&&&&&&&&&&&&&&&& Directory.CreateDirectory(directoryName);
&&&&&&&&&&&&&&&&&&& FileStream streamWriter = File.Create(unzippath + theEntry.Name);
&&&&&&&&&&&&&&&&&&& 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
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&& streamWriter.Close();
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&&&&&& s.Close();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9168331次
积分:40146
积分:40146
排名:第60名
原创:669篇
转载:1902篇
评论:425条
(8)(19)(16)(1)(9)(7)(19)(13)(9)(4)(5)(28)(12)(34)(5)(3)(13)(27)(18)(11)(3)(23)(24)(31)(42)(12)(34)(19)(37)(41)(39)(56)(146)(66)(78)(78)(6)(15)(28)(26)(17)(57)(46)(25)(41)(24)(37)(70)(73)(28)(31)(35)(49)(54)(27)(25)(16)(21)(13)(24)(26)(35)(31)(27)(6)(6)(2)(3)(3)(7)(5)(10)(4)(9)(3)(2)(12)(11)(23)(5)(1)(9)(16)(11)(14)(4)(4)(28)(17)(37)(413)(2)(7)(1)(3)(4)(7)(6)(10)(28)(9)(9)

我要回帖

更多关于 sharpziplib.dll 的文章

 

随机推荐