我有一个包含.ZIP文件的文件夹。 现在,我想解压缩ZIP文件到使用C#特定的文件夹,而无需使用任何外部组件或.NET Framework 4.5。
我已搜查,但没有发现使用拆包框架4.0或以下* .zip文件的任何解决方案。
我试过GZipStream,但它仅支持。广州,而不是.zip文件。
我有一个包含.ZIP文件的文件夹。 现在,我想解压缩ZIP文件到使用C#特定的文件夹,而无需使用任何外部组件或.NET Framework 4.5。
我已搜查,但没有发现使用拆包框架4.0或以下* .zip文件的任何解决方案。
我试过GZipStream,但它仅支持。广州,而不是.zip文件。
这里是例如从MSDN 。 System.IO.Compression.ZipFile
只是提出为:
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";
ZipFile.CreateFromDirectory(startPath, zipPath);
ZipFile.ExtractToDirectory(zipPath, extractPath);
}
}
}
编辑:对不起,我错过了你在.NET 4.0及以下的利益。 必要的.NET framework 4.5及以上。
我有同样的问题,发现解决问题的好和非常简单的文章。 http://www.fluxbytes.com/csharp/unzipping-files-using-shell32-in-c/
你需要参照名为微软壳牌控制和自动化COM库(Interop.Shell32.dll)
该代码(从只是让你看到它是多么简单的文章原封不动拍摄):
public static void UnZip(string zipFile, string folderPath)
{
if (!File.Exists(zipFile))
throw new FileNotFoundException();
if (!Directory.Exists(folderPath))
Directory.CreateDirectory(folderPath);
Shell32.Shell objShell = new Shell32.Shell();
Shell32.Folder destinationFolder = objShell.NameSpace(folderPath);
Shell32.Folder sourceFile = objShell.NameSpace(zipFile);
foreach (var file in sourceFile.Items())
{
destinationFolder.CopyHere(file, 4 | 16);
}
}
强烈建议您阅读他带来了标志4的explenation的物品─| 16
编辑:这几年之后我的应用程序,它利用这一点,已经运行了,我从所有的突然应用程序的停止工作两个用户有投诉。 看来该CopyHere函数创建临时文件/文件夹,这些都不会被删除造成的问题。 这些文件的位置可以在System.IO.Path.GetTempPath找到()。
ZipPackage可能是一个起点。 这里面System.IO.Packaging程序 ,并在.NET 4.0中提供
没有任何接近上面提到的.NET 4.5方法简单,但它看起来像它可以做你想做的。
.NET 3.5有这样的DeflateStream。 您必须在目录和这样的信息来创建结构,但PKWARE出版这一信息。 我已经写了一个解压缩工具,一旦你为它创建的结构不是特别繁重。
我有同样的问题,并通过调用通过从C#代码CMD壳7-ZIP可执行的解决了这个问题,如下,
string zipped_path = "xxx.7z";
string unzipped_path = "yyy";
string arguments = "e " + zipped_path + " -o" + unzipped_path;
System.Diagnostics.Process process
= Launch_in_Shell("C:\\Program Files (x86)\\7-Zip\\","7z.exe", arguments);
if (!(process.ExitCode == 0))
throw new Exception("Unable to decompress file: " + zipped_path);
并在Launch_in_Shell(...)
被定义为,
public static System.Diagnostics.Process Launch_in_Shell(string WorkingDirectory,
string FileName,
string Arguments)
{
System.Diagnostics.ProcessStartInfo processInfo
= new System.Diagnostics.ProcessStartInfo();
processInfo.WorkingDirectory = WorkingDirectory;
processInfo.FileName = FileName;
processInfo.Arguments = Arguments;
processInfo.UseShellExecute = true;
System.Diagnostics.Process process
= System.Diagnostics.Process.Start(processInfo);
return process;
}
缺点:您需要安装在你的机器7zip的,我只能用“.7z压缩”文件,试了一下。 希望这可以帮助。
你可以使用DotNetZip (开源)`
string zipFilePath = "C:\\sample.zip";
string extractedFilePath = "C:\\sampleFolder";
ZipFile zipfile = ZipFile.Read(zipFilePath);
if (!Directory.Exists(extractedFilePath))
Directory.CreateDirectory(extractedFilePath);
foreach (ZipEntry e in zipfile)
{
e.Extract(extractedFilePath,ExtractExistingFileAction.OverwriteSilently);
}`
在.NET 4.0中放气和gzip无法处理ZIP文件,但你可以使用shell功能解压文件。
public FolderItems Extract()
{
var shell = new Shell();
var sf = shell.NameSpace(_zipFile.Path);
return sf.Items();
}
当提取函数被调用时,你可以保存返回folderItems
FolderItems Fits = Extract();
foreach( var s in Fits)
{
shell.Namespace("TargetFolder").copyhere(s);
}