Directory.EnumerateFiles with Take和Where

时间:2017-05-03 09:24:11

标签: vb.net

我有以下问题:

For Each _file As String In Directory.EnumerateFiles(Quellpfad, "*.rdy").Take(500).Where(Function(item) item.Replace(Quellpfad, "").Length <= 11)

此代码应该从保存在字符串&#34; Quellpfad&#34;中的目录中获取文件。 通过以下两个标准:

1。)只有500个文件

2。)filename lenth&lt; = 11 eg。:0330829.rdy

文件0330829.rdy在目录中,但我无法通过上述代码找到它。

2 个答案:

答案 0 :(得分:2)

您最后应使用Take,因为您想先应用过滤器,还应使用Path.GetFileNamePath.GetFileNameWithoutExtension代替String.Replace

Dim files = From file In Directory.EnumerateFiles(Quellpfad, "*.rdy")
            Where Path.GetFileName(file).Length <= 11
            Take 500 

在VB.NET中查询语法支持Take,所以我更喜欢。

答案 1 :(得分:1)

您需要重新排序语句,将Where放在Take之前:

For Each _file As String In Directory.EnumerateFiles(Quellpfad, "*.rdy").Where(Function(item) item.Replace(Quellpfad, "").Length <= 11).Take(500)

Where会返回与您的条件FIRST匹配的所有文件,然后将这些文件限制为500.