递归获取归档文件列表

时间:2018-04-27 04:58:57

标签: c# powershell archive 7zip

例如,我有一个名为test.zip的存档。

我希望列出此存档中的所有文件并在其中存档而不解压缩。

  • test.zip
    • 的1.txt
    • 2.txt
    • subarchive.zip
      • 3.txt
      • 4.txt
    • somedir
      • 5.txt

最好在C#或Powershell上执行此操作。

有可能吗?

3 个答案:

答案 0 :(得分:0)

您可能想先看一下ZipArchive类: https://msdn.microsoft.com/en-us/library/system.io.compression.ziparchive(v=vs.110).aspx

如果您无法像我一样直接使用该类,可能会缺少ZipArchive参考。

正如本帖子中的user5093161所解释的:Cannot find `ZipArchive` in the “System.IO.Compression” namespace您可以安装以下两个NuGet包。

  1. NuGet System.IO.Compression
  2. NuGet 40-System.IO.Compression.FileSystem
  3. 第一种方法可以是显示每个条目的全名,例如:

    public void ZipTesting()
    {
        string zipPath = @"c:\zipTest\TestArchive.zip";
        using (ZipArchive archive = ZipFile.OpenRead(zipPath))
        {
            foreach (ZipArchiveEntry entry in archive.Entries)
            {
                Console.WriteLine(entry.FullName);
            }
        }
    }
    

答案 1 :(得分:0)

您可以使用DotNetZip库实现此目的:

    static void Main(string[] args)
    {
        using (ZipFile zip = ZipFile.Read(@"d:\test.zip"))
        {
            foreach (ZipEntry e in zip)
            {
                Console.WriteLine(e.IsDirectory);
            }
        }
    }

答案 2 :(得分:0)

这是另一个基于System.IO.Compression.ZipArchive类遍历存档的版本

static void OutputEntries(ZipArchive archive) {
        foreach (ZipArchiveEntry entry in archive.Entries) {
            Console.WriteLine(entry.Name);

            if (entry.FullName.EndsWith(".zip")) {

                ZipArchive embeddedZipArchive = new ZipArchive(entry.Open());
                OutputEntries(embeddedZipArchive);

            }
        }
像@Faenrig已经指出

  

如果您无法像我一样直接使用该课程   可能缺少ZipArchive参考。

     

正如此帖子中的user5093161所解释的:无法找到ZipArchive   您可以安装两个“System.IO.Compression”命名空间   关注NuGet包。

     

NuGet System.IO.Compression NuGet 40-System.IO.Compression.FileSystem