【问题标题】:Enumerate zipped contents of unzipped folder枚举解压缩文件夹的压缩内容
【发布时间】:2016-08-03 23:37:44
【问题描述】:

我正在尝试使用Directory.GetDirectories(folderPath) 枚举解压缩文件夹内的压缩文件夹。 我遇到的问题是它似乎没有找到压缩文件夹,当我遍历 string[] 时,它是空的。

Directory.GetDirectories() 是否是错误的解决方法?如果是,什么方法可以达到此目的?

文件路径示例:C:\...\...\daily\daily\{series of zipped folder}

public void CheckZippedDailyFolder(string folderPath)
      {
          if(folderPath.IsNullOrEmpty())
              throw new Exception("Folder path required");

          foreach (var folder in Directory.GetDirectories(folderPath))
          {
              var unzippedFolder = Compression.Unzip(folder + ".zip", folderPath);

              using (TextReader reader = File.OpenText(unzippedFolder + @"\" + new DirectoryInfo(folderPath).Name))
              {
                  var csv = new CsvReader(reader);
                  var field = csv.GetField(0);
                  Console.WriteLine(field);
              }

          }
      }

【问题讨论】:

  • Directory.GetDirectories(@"C:\path\to\folder") 返回指定文件夹中文件夹的字符串[]。如果您想要一个文件夹中的文件列表,您应该使用Directory.GetFilesDirectory.EnumerateFiles。另外,请记住“压缩文件夹”是文件(ZIP 文件),而不是“真实文件夹”。

标签: c# zip


【解决方案1】:

GetDirectories 是错误的使用方法。探险家对你说谎; zip 文件实际上是扩展名为 .zip 的文件,而不是文件系统级别的真实目录。

看: https://msdn.microsoft.com/en-us/library/system.io.compression.ziparchive.entries%28v=vs.110%29.aspx (ZipArchive.Entries) 和/或 https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile%28v=vs.110%29.aspx (ZipFile) 看看如何处理它们。

【讨论】:

  • 我不会对你说谎言。当您将某些内容压缩为 zip 格式时,它会失去其文件夹属性并变成一个文件。否则你是对的,GetDirectories 是不正确的。您需要遍历所有扩展名为 .zip 的文件