这可能是一个简单的问题,但如何获取除.zip
扩展名以外的文件夹中的所有文件。我有一个foreach
循环如下:
foreach (DirectoryInfo directory in directories)
{
foreach (FileInfo file in directory.GetFiles("*.*"))
{
}
}
我应该在第二个循环中执行if
语句并检查if (file.Name.contains("zip")) then continue
还是有更好的方法?
答案 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();
}