通过字符串列表获取具有多个扩展名的文件名

Get files names with multiple extensions by a list of strings

提问人:Gianfranco Vrech 提问时间:7/3/2023 最后编辑:Eugene AstafievGianfranco Vrech 更新时间:7/4/2023 访问量:46

问:

在VSTO解决方案中,我有一个列表(Strings):

AA000017
FF100218
P0100217
DF100216
CODICE - CODE
A010AA77
B0000017

在一个文件夹中,我有许多具有不同扩展名的文件,例如我有:

DF100216.DXF
DF100216.DWG
DF100216.PDF
DF100216.STP
FF100218.PDF
FF100218_00-001.PDF
FF100218_00-002.PDF
FF100218_00-003.PDF
FF100218.STP
ecc 

这适用于列表的每个值。例如,如果我需要带有代码FF100218的 pdf 文件,我需要返回一个 lsit whit :

FF100218.PDF
FF100218_00-001.PDF
FF100218_00-002.PDF
FF100218_00-003.PDF

我有这样的代码:

Dim SelectedtList As New List(Of String) {"DF100216","FF100218","DF100216"}
Dim DrawingExtensionList() As String = {"*.PDF","*.TIF"} 
 For Each ext In DrawingExtensionList
                            'Returns only the filenames based on the directory that is selected
                            Dim fi = From f In New IO.DirectoryInfo(DrowingPath_Internal).GetFiles(ext).Cast(Of IO.FileInfo)()
                                     Where fi.Name Like SelectedtList
                                     Select f
                            fileList.AddRange(fi)
                        Next

有没有办法做到这一点?

.NET vb.net LINQ 文件名

评论

1赞 Steve 7/3/2023
尝试 Directory.GetFiles(“FF100218*.*”)
0赞 Gianfranco Vrech 7/3/2023
是的,使用 GetFiles,我得到了我需要的结果,但只有一个扩展名。如果我需要代码的所有文档,它不起作用。我有一个适用于文件扩展名的查询,但我无法进行修改以读取代码。
0赞 jmcilhinney 7/3/2023
不,不仅仅是一个扩展。如果您使用“.*”,那么您将获得所有扩展名。也许你实际上指的是一种模式。显而易见的解决方案是多次调用,每个模式调用一次。这就是循环的用途。GetFiles
0赞 Steve 7/3/2023
对不起,它是 Directory.GetFiles(path, “FF100218*.*”);在 pattern 参数中,您可以使用 * 来忽略前缀后面存在的任何内容以及扩展名
1赞 Steve 7/3/2023
然后使用具有相同参数的 EnumerateFiles,但它不会加载内存中的所有文件。

答:

1赞 Andrew Morton 7/4/2023 #1

参考在 C# 中,如何使用另一个列表的 StartsWith() 条件过滤列表?,您可以这样做:

Imports System.IO

Module Module1

    Sub Main()
        Dim files = {"DF100216.DXF", "DF100216.DWG", "DF100216.PDF", "DF100216.STP", "FF100218.PDF", "FF100218_00-001.PDF", "FF100218_00-002.PDF", "FF100218_00-003.PDF", "FF100218.STP", "ecc"}
        Dim selectedList = {"DF100216", "FF100218", "DF100216"}
        Dim drawingExtensionList() As String = {".pdf", ".TIF"}

        Dim fileList = files.Where(Function(f) selectedList.Any(Function(s) Path.GetFileNameWithoutExtension(f).StartsWith(s, StringComparison.InvariantCultureIgnoreCase) AndAlso
                                               drawingExtensionList.Any(Function(w) String.Compare(Path.GetExtension(f), w, StringComparison.InvariantCultureIgnoreCase) = 0))).ToList()

        Console.WriteLine(String.Join(vbCrLf, fileList))

        Console.ReadLine()

    End Sub

End Module

注意:它使用文件扩展名,如“.pdf”,而不是通配符样式的“*.pdf”。

要获得:

DF100216.PDF
FF100218.PDF
FF100218_00-001.PDF
FF100218_00-002.PDF
FF100218_00-003.PDF

要使它从目录中工作,而不是像上面的例子那样将其设置为数组,您可以使用:

Dim files = Directory.EnumerateFiles("your\full\path\here")

评论

0赞 Gianfranco Vrech 7/4/2023
让我们在聊天中继续讨论