我有以下解决方案删除只有一个扩展名的单个文件类型; 但是我试图找到一种方法来合并多个文件扩展名,例如:.wma, .mp3, .wav
DirectoryInfo di = new DirectoryInfo(@"C:\");
FileInfo[] files = di.GetFiles("*.mpeg")
.Where(p => p.Extension == ".mpeg").ToArray();
foreach (FileInfo file in files)
try
{
file.Attributes = FileAttributes.Normal;
File.Delete(file.FullName);
}
catch { }
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
那么这只是将你的条件改为"扩展是一个集合中的任何一个"并从GetFiles调用中删除模式的问题.另请注意,您无需调用ToArray()- 只需迭代结果:
var extensions = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase)
{ ".wma", ".mp3", ".wav" };
var files = new DirectoryInfo(@"c:\").GetFiles()
.Where(p => extensions.Contains(p.Extension));
foreach (var file in files)
{
// try/catch if you really need, but I'd recommend catching a more
// specific exception
file.Attributes = FileAttributes.Normal;
File.Delete(file.FullName);
}
Run Code Online (Sandbox Code Playgroud)
您可以在数组中包含扩展名,然后从目录中获取所有文件并比较每个扩展名,如下所示:
string[] fileExtensions = new[] { ".wma", ".mp3", ".wave" };
DirectoryInfo di = new DirectoryInfo(@"C:\");
FileInfo[] files = di.GetFiles()
.Where(p => fileExtensions.Contains(p.Extension)).ToArray();
Run Code Online (Sandbox Code Playgroud)
如果您想要不区分大小写的比较,请使用:
FileInfo[] files = di.GetFiles()
.Where(p => fileExtensions.Contains
(p.Extension, StringComparer.InvariantCultureIgnoreCase)).ToArray();
Run Code Online (Sandbox Code Playgroud)
您可以将允许的扩展名存储在集合中并使用Enumerable.Contains:
string[] allowedExtensions = { ".mpeg", ".wma", ".mp3", ".wave" };
FileInfo[] files = di.EnumerateFiles()
.Where(p => allowedExtensions.Contains(p.Extension, StringComparer.InvariantCultureIgnoreCase))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
请注意,DirectoryInfo.EnumerateFiles在这种情况下,我使用的可能更有效,因为它不需要DirectoryInfo.GetFiles在开始处理之前将所有文件名加载到内存(as )中.StringComparer.InvariantCultureIgnoreCase应该是自我解释的.
| 归档时间: |
|
| 查看次数: |
1931 次 |
| 最近记录: |