我如何在 C# 中使用 sharpziplib 从 http 下载和提取单个文件?
how can i download and extract single file from http using sharpziplib in c#?
有人知道我该怎么做吗?我尝试重新制作这段代码,但它不起作用。 Unpack a zip using ZipInputStream (eg for Unseekable input streams)
你可以在没有外部依赖的情况下做到这一点。添加 System.IO.Compression.dll
并像这样使用它
using (var client = new System.Net.Http.HttpClient())
using (var stream = client.GetStreamAsync("https://github.com/frictionlessdata/specs/archive/master.zip").Result)
{
var basepath = Path.Combine(Path.GetTempPath() + "myzip");
System.IO.Directory.CreateDirectory(basepath);
var ar = new System.IO.Compression.ZipArchive(stream, System.IO.Compression.ZipArchiveMode.Read);
foreach (var entry in ar.Entries)
{
var path = Path.Combine(basepath, entry.FullName);
if (string.IsNullOrEmpty(entry.Name))
{
System.IO.Directory.CreateDirectory(Path.GetDirectoryName(path));
continue;
}
using (var entryStream = entry.Open())
{
System.IO.Directory.CreateDirectory(Path.GetDirectoryName(path));
using (var file = File.Create(path))
{
entryStream.CopyTo(file);
}
}
}
}
如果需要,您可以将 HttpClient 替换为 WebClient 或 HttpRequest。
如果只想提取一个文件,请将 foreach (var entry in ar.Entries)
替换为 :
var entry = ar.Entries.FirstOrDefault(e => e.FullName.EndWith("myFile.txt"));
if(entry == null)
return;
有人知道我该怎么做吗?我尝试重新制作这段代码,但它不起作用。 Unpack a zip using ZipInputStream (eg for Unseekable input streams)
你可以在没有外部依赖的情况下做到这一点。添加 System.IO.Compression.dll
并像这样使用它
using (var client = new System.Net.Http.HttpClient())
using (var stream = client.GetStreamAsync("https://github.com/frictionlessdata/specs/archive/master.zip").Result)
{
var basepath = Path.Combine(Path.GetTempPath() + "myzip");
System.IO.Directory.CreateDirectory(basepath);
var ar = new System.IO.Compression.ZipArchive(stream, System.IO.Compression.ZipArchiveMode.Read);
foreach (var entry in ar.Entries)
{
var path = Path.Combine(basepath, entry.FullName);
if (string.IsNullOrEmpty(entry.Name))
{
System.IO.Directory.CreateDirectory(Path.GetDirectoryName(path));
continue;
}
using (var entryStream = entry.Open())
{
System.IO.Directory.CreateDirectory(Path.GetDirectoryName(path));
using (var file = File.Create(path))
{
entryStream.CopyTo(file);
}
}
}
}
如果需要,您可以将 HttpClient 替换为 WebClient 或 HttpRequest。
如果只想提取一个文件,请将 foreach (var entry in ar.Entries)
替换为 :
var entry = ar.Entries.FirstOrDefault(e => e.FullName.EndWith("myFile.txt"));
if(entry == null)
return;