VB c#beginner here。我使用以下代码片段列出目录中的所有视频。
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 :(得分:0)
方法.GetFiles()
的第二个参数是您在此处指定搜索模式时不需要再执行过滤的搜索模式:如果您将模式设置为:{{{},您将获得名称为sample的所有文件1}}或者您将获得名称以样本结尾但使用"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));
将为您提供所有具有名称的文件作为示例,其中将过滤扩展名为.mkv或.avi或mp4的文件
答案 1 :(得分:0)
您可能正在寻找String.IndexOf(string)
https://msdn.microsoft.com/en-us/library/k8b1470s(v=vs.110).aspx
如果未找到,则返回-1。如果返回任何其他值,则name包含参数字符串。
答案 2 :(得分:0)
感谢您的帮助,使用
让它工作 .Where(s => !s.ToLower().Contains("sample"));
这排除了其中包含“样本”字样的名称。