我试图以编程方式解压缩压缩文件.
我尝试System.IO.Compression.GZipStream在.NET中使用该类,但是当我的应用程序运行时(实际上是一个单元测试),我得到了这个异常:
System.IO.InvalidDataException:GZip标头中的幻数不正确.确保您传入GZip流..
我现在意识到.zip文件与.gz文件不同,这与文件GZip不一样Zip.
但是,由于我能够通过手动双击压缩文件然后单击"提取所有文件"按钮来提取文件,我认为应该有一种在代码中执行此操作的方法.
因此,我尝试使用Process.Start()压缩文件的路径作为输入.这会导致我的应用程序打开一个窗口,显示压缩文件中的内容.这一切都很好,但应用程序将安装在没有任何一个的服务器上单击"提取所有文件"按钮.
那么,如何让我的应用程序解压缩压缩文件中的文件?
或者还有另一种方法吗?我更喜欢在代码中执行此操作,而无需下载任何第三方库或应用程序; 安全部门对此并不太看中......
bsa*_*ara 468
使用.NET 4.5,您现在可以使用.NET框架解压缩文件:
using System;
using System.IO;
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";
System.IO.Compression.ZipFile.CreateFromDirectory(startPath, zipPath);
System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, extractPath);
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码直接来自Microsoft的文档:http://msdn.microsoft.com/en-us/library/ms404280(v = vs.110).aspx
ZipFile包含在程序集中System.IO.Compression.FileSystem.(感谢nateirvin ...见下面的评论)
Mis*_*pic 91
对于.Net 4.5+
并不总是希望将未压缩的文件写入磁盘.作为一名ASP.Net开发人员,我必须摆弄权限,授予我的应用程序写入文件系统的权限.通过使用内存中的流,我可以回避所有这些并直接读取文件:
using (ZipArchive archive = new ZipArchive(postedZipStream))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
var stream = entry.Open();
//Do awesome stream stuff!!
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您仍然可以通过调用ExtractToFile()以下方法将解压缩的文件写入磁盘:
using (ZipArchive archive = ZipFile.OpenRead(pathToZip))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
entry.ExtractToFile(Path.Combine(destination, entry.FullName));
}
}
Run Code Online (Sandbox Code Playgroud)
要使用ZipArchive该类,您需要添加对System.IO.Compression命名空间的引用.
Chr*_*way 54
我们在许多项目中成功使用了SharpZipLib.我知道这是第三方工具,但是包含了源代码,如果你选择在这里重新发明轮子,可以提供一些见解.
Luk*_*kas 54
免费,没有外部DLL文件.一切都在一个CS文件中.一个下载只是CS文件,另一个下载是一个非常容易理解的例子.刚试了今天,我简直不敢相信设置有多简单.它首先尝试,没有错误,没有任何东西.
https://github.com/jaime-olivares/zipstorer
Sam*_*Axe 27
使用http://www.codeplex.com/DotNetZip上的DotNetZip库
用于操作zip文件的类库和工具集.使用VB,C#或任何.NET语言轻松创建,提取或更新zip文件......
DotNetZip适用于具有完整.NET Framework的PC,也可以在使用.NET Compact Framework的移动设备上运行.使用VB,C#或任何.NET语言或任何脚本环境创建和读取zip文件......
如果您想要的是更好的DeflateStream或GZipStream类来替换.NET BCL中内置的那个,DotNetZip也有.DotNetZip的DeflateStream和GZipStream在基于Zlib的.NET端口的独立程序集中提供.这些流支持压缩级别,并提供比内置类更好的性能.还有一个ZlibStream来完成这个集合(RFC 1950,1951,1952)......
小智 9
String ZipPath = @"c:\my\data.zip";
String extractPath = @"d:\\myunzips";
ZipFile.ExtractToDirectory(ZipPath, extractPath);
Run Code Online (Sandbox Code Playgroud)
要使用ZipFile类,必须在项目中添加对System.IO.Compression.FileSystem程序集的引用
| 归档时间: |
|
| 查看次数: |
254704 次 |
| 最近记录: |