使用Directory.EnumerateFiles进行多重过滤 [英] Multi filter with Directory.EnumerateFiles

查看:81
本文介绍了使用Directory.EnumerateFiles进行多重过滤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法使用VB.net 2013让以下行工作。



Dim files = Directory.EnumerateFiles(musicfolder,* .m4a; * .mp3; * .mp2; * .wav; * .wma; * .cda; *。ram)



是否存在可行的等效线相同的任务?

解决方案

该行不起作用,因为在任一目录文件列表方法中没有设施AFAIK指定多个扩展名:GetFiles和EnumerateFiles不接受以分号分隔的文件名列表。



你所能做的就是检索所有文件,然后过滤它们。


未经测试。 应该允许更多的灵活性:



Directory.EnumerateFiles(musicfolder)



Directory.EnumerateFiles(musicfolder,* .m4a; * .mp3; * .mp2; * .wav; * .wma; *。cda ; *。ram)



Directory.EnumerateFiles(musicfolder,* .m4a; * .mp3; * .mp2,* .wav,* .wma; * .cda; *。ram)



Directory.EnumerateFiles(musicfolder,new string [] {* .m4a; * .mp3; * .mp2,* .wav; * .wma,* .cda; *。ram})





  public  静态 部分  class 目录
{
public static System.Collections.Generic.IEnumerable< string>
EnumerateFiles

string 目录

params string [] Pattern

{
if ((Pattern == null )||(Pattern.Length == 0 ))
{
Pattern = new string [] { *};
}

foreach string l in Pattern)
{
foreach string p in l.Split( new char [] {' ;'},System.StringSplitOptions.RemoveEmptyEntries))
{
foreach string f in System.IO.Directory.EnumerateFiles(Directory,p))
{
yield return f;
}
}
}

yield break ;
}
}


  string  [] recordedFiles = { 在场。 。dll}; 
IEnumerable< string> files = Directory.EnumerateFiles( @ C:\ temp \ ServiceFiles *。*,SearchOption.TopDirectoryOnly)
.Where(filesInDirectory = > recordedFiles
.Any(Recording = > filesInDirectory.ToUpperInvariant()
.Contains(Recording.ToUpperInvariant ())));


I am having trouble getting the following line to work using VB.net 2013.

Dim files = Directory.EnumerateFiles(musicfolder, "*.m4a;*.mp3;*.mp2;*.wav;*.wma;*.cda;*.ram")

Is there an equivelent line that would work for doing the same task?

解决方案

The line won't work, because there is no facility AFAIK to specify multiple extensions in either Directory file list method: GetFiles and EnumerateFiles do not accept semicolon separated lists of filenames.

All you can do is retrieve all files, and filter them afterwards.


Untested. Should allow much more flexibility:

Directory.EnumerateFiles(musicfolder)

Directory.EnumerateFiles(musicfolder, "*.m4a;*.mp3;*.mp2;*.wav;*.wma;*.cda;*.ram")

Directory.EnumerateFiles(musicfolder, "*.m4a;*.mp3;*.mp2" , "*.wav" , "*.wma;*.cda;*.ram")

Directory.EnumerateFiles(musicfolder, new string[] { "*.m4a;*.mp3;*.mp2" , "*.wav;*.wma" , "*.cda;*.ram" } )


public static partial class Directory
{
  public static System.Collections.Generic.IEnumerable<string>
  EnumerateFiles
  (
    string          Directory
  ,
    params string[] Pattern
  )
  {
    if ( ( Pattern == null ) || ( Pattern.Length == 0 ) )
    {
      Pattern = new string[] { "*" } ;
    }

    foreach ( string l in Pattern )
    {
      foreach ( string p in l.Split ( new char[] { ';' } , System.StringSplitOptions.RemoveEmptyEntries ) )
      {
        foreach ( string f in System.IO.Directory.EnumerateFiles ( Directory , p ) )
        {
          yield return f ;
        }
      }
    }

    yield break ;
  }
}


string[] recordedFiles = { "presence.", ".dll" };
                IEnumerable<string> files = Directory.EnumerateFiles(@"C:\temp\ServiceFiles", "*.*", SearchOption.TopDirectoryOnly)
                                                                    .Where(filesInDirectory => recordedFiles
                                                                    .Any(Recording => filesInDirectory.ToUpperInvariant()
                                                                    .Contains(Recording.ToUpperInvariant())));


这篇关于使用Directory.EnumerateFiles进行多重过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆