日期:2014-05-18  浏览次数:20844 次

C# 解压缩文件?
C# 如何解压缩文件?大家用的什么方法?

在网上看到用SharpZipLib,但是下载的例子都是压缩可以,解压不可以的。

我要压缩的是文件夹,文件夹下有很多子文件夹,和文件。大概20M

目前用的这种方法,但是效率太慢了,6.7M的zip文件解压的制定目录差不多要1分钟,有点受不了。

这个方法是:
C# code

//添加引用Shell32.dll 在系统文件夹里
public bool BuildFrame(string srcFile, string destFolder)
        {
            try
            {
                Shell32.ShellClass sc = new Shell32.ShellClass();
                Shell32.Folder SrcFolder = sc.NameSpace(srcFile);
                Shell32.Folder DestFolder = sc.NameSpace(destFolder);
                Shell32.FolderItems items = SrcFolder.Items();
                DestFolder.CopyHere(items, 20);
                return true;
            }
            catch
            {
                return false;
            }
        }



这个方法运行可以,就是太慢1分多种,请问大家有其他办法没?


希望能运行的,最好是源码,不要贴网上的,网上的都参考的差不多了。

谢谢了

------解决方案--------------------
直接调用WINR
------解决方案--------------------
解压本来就是要看你文件的大小的啊。。
------解决方案--------------------
你去下载一个组件 ICSharpCode.SharpZipLib.dll

下面是我写的包装方法。
你看一下,满不满 足你的要求
C# code
 
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using ICSharpCode.SharpZipLib.Zip;

namespace Microsoft.ITF.Tools.GZIP
{
public class GZip
{
/// <summary>
/// 打包文件
/// </summary>
/// <param name="filenames">要打包的文件列表 </param>
/// <param name="GzipFileName">目标文件名 </param>
/// <param name="CompressionLevel">压缩品质级别(0~9) </param>
/// <param name="SleepTimer">休眠时间(单位毫秒) </param>
public static void DoZip( List <FileInfo> filenames, string GzipFileName, int CompressionLevel, int SleepTimer )
{

ZipOutputStream s = new ZipOutputStream( File.Create( GzipFileName ) );
try
{
s.SetLevel( CompressionLevel );  //0 - store only to 9 - means best compression

foreach ( FileInfo file in filenames )
{
FileStream fs = null;
try
{
fs = file.Open( FileMode.Open, FileAccess.ReadWrite );
}
catch
{ continue; }

byte[] buffer = new byte[fs.Length];
fs.Read( buffer, 0, buffer.Length );

ZipEntry entry = new ZipEntry( Path.GetFileName( file.Name ) );
entry.DateTime = ( file.CreationTime > file.LastWriteTime ? file.LastWriteTime : file.CreationTime );

s.PutNextEntry( entry );

s.Write( buffer, 0, buffer.Length );


fs.Close();
file.Delete();

if ( SleepTimer > 10 )
Thread.Sleep( SleepTimer );
}
}
finally
{
s.Finish();
s.Close();
}
}
/// <summary>
/// 打包文件
/// </summary>
/// <param name="filenames">要打包的文件列表 </param>
/// <param name="GzipFileName">目标文件名 </param>
/// <param name="CompressionLevel">压缩品质级别(0~9) </param>
/// <param name="SleepTimer">休眠时间(单位毫秒) </param>
public static void DoZip( List <string> filenames, string GzipFileName, int CompressionLevel, int SleepTimer )
{
ZipOutputStream s = new ZipOutputStream( File.Create( G