2

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

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

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

4

5 回答 5

6

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

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

IEnumerable<FileInfo> files = directory.GetFiles("*.*").Where(file => !string.Equals(file.Extension, ".zip", StringComparison.InvariantCultureIgnoreCase));
于 2012-04-16T10:04:51.713 回答
3

从 .NET 4.0 开始,您可以使用Directory.EnumerateFiles

List<string> files = Directory.EnumerateFiles("C:\\temp", "*.*", 
                                              SearchOption.AllDirectories)
                       .Where(n => Path.GetExtension(n) != ".txt").ToList();
于 2012-04-16T10:08:50.133 回答
1

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

于 2012-04-16T10:05:24.963 回答
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;
  }
于 2012-04-16T10:08:12.583 回答
0

使用 LINQ:

static List<string> GetNonZipFiles(string path)
        {
            return Directory.GetFiles(path).Where(x => !x.EndsWith(".zip")).ToList();
        }
于 2012-04-16T10:18:58.493 回答