获取除.zip之外的所有文件

时间:2012-04-16 10:01:32

标签: c# file loops zip

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

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

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

5 个答案:

答案 0 :(得分:6)

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

修改 您可以使用此LINQ查询来简化代码:

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

答案 1 :(得分:3)

在.NET 4.0及更高版本中,您可以使用Directory.EnumerateFiles

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您可以尝试此代码

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

答案 4 :(得分:0)

使用LINQ:

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