【问题标题】:Get all files except .zip获取除 .zip 之外的所有文件
【发布时间】:2012-04-16 10:01:31
【问题描述】:

这可能是一个简单的问题,但是我如何获取文件夹中除 .zip 扩展名之外的所有文件。我有一个foreach 循环如下:

foreach (DirectoryInfo directory in directories)
{
    foreach (FileInfo file in directory.GetFiles("*.*"))
    {
    }
}

我应该在第二个循环中执行if 语句并检查if (file.Name.contains("zip")) then continue 还是有更好的方法?

【问题讨论】:

  • 问题在于您将排除 zip.txt。
  • 哎呀,是的,我没想到

标签: c# file loops zip


【解决方案1】:

FileInfo 有一个属性Extension,它将为您提供代表每个文件扩展名的字符串。

编辑: 您可以使用此 LINQ 查询来简化您的代码:

IEnumerable<FileInfo> files = directory.GetFiles("*.*").Where(file => !string.Equals(file.Extension, ".zip", StringComparison.InvariantCultureIgnoreCase));

【讨论】:

  • 不幸的是不能使用 linq,因为它是框架 2.0,但您的第一个建议成功了。谢谢:)
【解决方案2】:

在 .NET 4.0 以后,您可以使用Directory.EnumerateFiles

List<string> files = Directory.EnumerateFiles("C:\\temp", "*.*", 
                                              SearchOption.AllDirectories)
                       .Where(n => Path.GetExtension(n) != ".txt").ToList();

【讨论】:

    【解决方案3】:

    不要检查名称中的 zip。使用FileInfo.Extension 或在Path.GetExtension(filename) 中传递名称不应为.zip

    【讨论】:

      【解决方案4】:

      你可以试试这个代码

      public staticList<FileInfo> GetFiles(string folder, string includeMask, string     excludeMask, SortOrder sortOrder, SearchOption searchOption)
      {
      DirectoryInfo folderDirectoryInfo = newDirectoryInfo(folder);
      List<FileInfo> files = newList<FileInfo>(folderDirectoryInfo.GetFiles(includeMask,  searchOption));
      
      stringexcludeMaskRegEx = FileSystemHelper.WildcardToRegex(excludeMask);
      // exclude files
      files = (fromfile infiles
               where!Regex.IsMatch(file.Name, excludeMaskRegEx) 
               selectfile).ToList<FileInfo>();
      if(files.Count > 0)
      {
          switch(sortOrder)
          {
              //somecode
          }
        }
        returnfiles;
        }
      

      【讨论】:

        【解决方案5】:

        使用 LINQ:

        static List<string> GetNonZipFiles(string path)
                {
                    return Directory.GetFiles(path).Where(x => !x.EndsWith(".zip")).ToList();
                }
        

        【讨论】:

          猜你喜欢
          • 2015-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-16
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          相关资源
          最近更新 更多