2016-06-08 52 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));'' –

相關問題