从目录中解压缩一个文件

时间:2011-11-29 10:00:39

标签: c# dll zip

一切正常。我可以从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 我怎么能实现这个目标?是不是有参数,我可以包含所有子文件夹 - 用于搜索或类似的东西? :(

2 个答案:

答案 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;
}