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

C# 获取除.zip之外的所有文件,c#,file,loops,zip,C#,File,Loops,Zip,这可能是一个简单的问题,但如何获取文件夹中除.zip扩展名以外的所有文件。我有一个foreach循环,如下所示: foreach (DirectoryInfo directory in directories) { foreach (FileInfo file in directory.GetFiles("*.*")) { } } 我应该在第二个循环中执行if语句并检查if(file.Name.contains(“zip”)),然后继续,还是有更好的方法?FileInf

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

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

我应该在第二个循环中执行
if
语句并检查
if(file.Name.contains(“zip”)),然后继续
,还是有更好的方法?

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

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

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

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

您可以尝试此代码

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;
  }
publicstaticlist GetFiles(字符串文件夹、字符串includeMask、字符串excludeMask、排序器排序器、搜索选项SearchOption)
{
DirectoryInfo folderDirectoryInfo=newDirectoryInfo(文件夹);
List files=newList(folderDirectoryInfo.GetFiles(includeMask,searchOption));
stringexcludeMaskRegEx=FileSystemHelper.WildcardToRegex(excludeMask);
//排除文件
文件=(从文件填充)
where!Regex.IsMatch(file.Name,excludeMaskRegEx)
选择file.ToList();
如果(files.Count>0)
{
开关(分拣机)
{
//一些代码
}
}
返回文件;
}

在.NET 4.0以后的版本中,您可以使用:

List files=Directory.EnumerateFiles(“C:\\temp”、“***”,
SearchOption.AllDirectories)
.Where(n=>Path.GetExtension(n)!=“.txt”).ToList();
使用LINQ:

static List<string> GetNonZipFiles(string path)
        {
            return Directory.GetFiles(path).Where(x => !x.EndsWith(".zip")).ToList();
        }
静态列表GetNonZipFiles(字符串路径)
{
返回目录.GetFiles(path).Where(x=>!x.EndsWith(“.zip”)).ToList();
}

问题是,你将不包括ZIP.TX.OOPS。是的,我没有想到不幸的是不能使用LINQ,因为它是框架2,但是你的第一个建议起了作用。谢谢:)
static List<string> GetNonZipFiles(string path)
        {
            return Directory.GetFiles(path).Where(x => !x.EndsWith(".zip")).ToList();
        }