2012-04-16 28 views
1

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

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

我应该做的if声明第二循环中,检查if (file.Name.contains("zip")) then continue或是否有更好的办法?

+2

问题在于你会排除zip.txt。 – Ciaran 2012-04-16 10:05:08

+0

oops是的,我不认为 – Zaki 2012-04-16 10:07:12

回答

5

FileInfo有一个属性Extension它会给你表示每个文件扩展名的字符串。

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

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

不幸的是不能使用LINQ,因为它是框架2.0,但你的第一个建议做到了。谢谢 :) – Zaki 2012-04-16 10:16:11

1

不检查在名称拉链。使用FileInfo.ExtensionPath.GetExtension(filename)传递名称不应该是.zip

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

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

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

使用LINQ:

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