一切正常。我可以从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();
}
这不起作用,因为他在根目录中搜索文件。
我也不会做类似的事情:DirectoryName/toc.out
我怎么能实现这个目标?是不是有参数,我可以包含所有子文件夹 - 用于搜索或类似的东西? :(
答案 0 :(得分:1)
您可以编写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的所有子文件夹,并将其名称和长度输出到控制台。
希望有所帮助。
答案 1 :(得分:0)
您可以查看条目名称的最后一部分。即使文件位于子文件夹中,名称条目也类似于" Folder / file.ext"。 实现此目的的扩展方法如下:
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;
}