2016-06-08 58 views
0

VB c#初学者在这里。我正在使用下面的代码片段列出目录中的所有视频。字符串不包含c#中的子句visual basic

var files = Directory 
     .GetFiles("D:\\Movies", "*.*", SearchOption.AllDirectories) 
     .Where(s => s.ToLower().EndsWith(".mp4") || s.ToLower().EndsWith(".mkv") || s.ToLower().EndsWith(".avi")); 

现在的挑战是排除那些在他们的名字中有“样本”单词的视频。

我试着在最后加入.Where(s => s != "sample.avi");但它似乎没有工作。

也当我做.Where(s => s.Contains("sample");时,我能够列出所有名称中包含“sample”字样的文件。

也有可能从files数组中删除这些名称或枚举什么是?我不认为这是一个阵列,因为找到计数不起作用,就像files.Count/files.Length

我想我对枚举和字符串的理解在这里有点弱。请指导。

回答

0

的第二个参数的方法.GetFiles()是你需要不执行了,如果你在这里指定搜索模式过滤搜索模式:您将获得与名样本中的所有文件,如果你给的格局为:"sample.*"或者你会得到其名称中的所有文件与样品结束,但通过使用"*Sample.*"有任何扩展因此,使用这样的:

string pattern="sample.avi"; 
var files = Directory 
     .GetFiles("D:\\Movies", pattern, SearchOption.AllDirectories); 

如果你想使用多个过滤器是指使用这样的:

string pattern="sample.*"; 
var files = Directory 
      .GetFiles("D:\\Movies", pattern, SearchOption.AllDirectories) 
      .Where(s => s.ToLower().EndsWith(".mp4") || 
      s.EndsWith(".mkv",StringComparison.InvariantCultureIgnoreCase)|| 
      s.EndsWith(".avi",StringComparison.InvariantCultureIgnoreCase)); 

所以.GetFiles()会给大家一个具有名称为样本的文件,其中将过滤器扩展的.mkv或.AVI或MP4文件

+0

这只会抓取名称为sample.avi的文件,我想实现的是所有文件的名称中都不包含单词“sample”。 – aelor

+0

使用'ToLower'会产生一堆不必要的字符串。使用'EndsWith'的重载,它允许你指定一个不区分大小写的搜索:'s.EndsWith(“。mkv”,StringComparison.InvariantCultureIgnoreCase)' –

+0

@ChrisDunaway:谢谢你的建议,它可以帮助我改进我的答案 –

0

感谢您的帮助球员,得到它通过使用

.Where(s => !s.ToLower().Contains("sample"));

这排除了对他们有“样本”字的名字上班。

+0

Don不要使用'ToLower'。你只是在创造一堆不必要的字符串。使用'Contains'的重载,它允许你指定一个不区分大小写的搜索:'.Where(s =>!s.Contains(“sample”,StringComparer.InvariantCultureIgnoreCase));'' –