从目录中解压一个文件
问题描述:
一切工作正常..我可以解压缩文件,从一个Zip/RAR ..档案。 问题是,如何解压文件,那在目录?从目录中解压一个文件
解压缩文件直接我使用(SharpZipLib):
FastZip fastZip = new FastZip();
fastZip.ExtractZip(source, targetDirectory, null);
using (var fs = new FileStream(source, FileMode.Open, FileAccess.Read))
using (var zf = new ZipFile(fs))
{
var ze = zf.GetEntry("toc.out");
if (ze == null)
{
throw new ArgumentException("toc.out", "not found in Zip");
}
using (var s = zf.GetInputStream(ze))
{
// do something with ZipInputStream
}
}
}
或用DotNetZip/ZipDotNet:
using (ZipFile zip = ZipFile.Read(source))
{
ZipEntry e = zip["toc.out"];
e.Extract();
}
那不是工作,导致HES搜索在根文件.. 而且我也不会这样做:DirectoryName/toc.out
我该如何做到这一点?没有参数,我可以在其中包含所有子文件夹 - 用于搜索或类似的东西? :(
答
控制台。
希望有所帮助,你可以检查条目的名称的最后一部分,即使该文件是在子文件夹中,名称项将类似于“文件夹/文件。 ext“。 一个扩展方法可以实现SH这将是这样的:
public static ZipEntry GetEntryExt(this ZipFile file, string fileName)
{
foreach (ZipEntry entry in file)
{
if (entry.IsFile && entry.Name.EndsWith(Path.DirectorySeparatorChar + fileName))
return entry;
}
return null;
}
答
可以编写一个LINQ表达发现在子文件夹中的文件如下所示
DirectoryInfo dirInfo = new DirectoryInfo(@"C:\");
foreach (var file in dirs.Select(dir => dir.EnumerateFiles().Where(i => i.Name.ToLower() == "wsdl.zip").FirstOrDefault()).Where(file => file != null))
{
Console.WriteLine(file.ToString());
Console.WriteLine(file.Length);
}
上面的代码中搜索在C驱动器的所有子文件夹中的文件wsdl.zip并打印它的名字和长度到
[?使用SharpZipLib解压缩特定文件]中可能重复(http://*.com/questions/328343/using-sharpziplib-to-unzip-specific-files) – samjudson
不。我看到这个,他们直接解压缩文件,像我一样没有目录..... – eMi