具有多个扩展名过滤器的Getfile和按文件名排序

时间:2018-05-22 10:04:41

标签: vb.net vb.net-2010 vb6-migration

我正在使用vb.net桌面应用程序。现在我需要来自目录的文件是扩展名.txt和.sql,还需要按文件夹名称顺序排列的文件。需要两个人一起怎么做?

  Try
                Dim s As String = Txtfolder.Text


                Dim files As List(Of String) = New List(Of String)()
                Try
                  For Each f As String In Directory.GetFiles(s, "*.*").Where(Function(f1) f1.EndsWith(".sql") OrElse f1.EndsWith(".txt")).OrderBy(Function(f) f.LastWriteTime).First()
                        files.Add(f)
                    Next

                    For Each d As String In Directory.GetDirectories(s)
                        files.AddRange(DirSearch(d))
                    Next
                Catch excpt As System.Exception
                    MessageBox.Show(excpt.Message)
                End Try


  Private Function DirSearch(ByVal sDir As String) As List(Of String)
        Dim files As List(Of String) = New List(Of String)()
        Try
            For Each f As String In Directory.GetFiles(sDir, "*.*").Where(Function(f1) f1.EndsWith(".sql") OrElse f1.EndsWith(".txt"))
                files.Add(f)
            Next

            For Each d As String In Directory.GetDirectories(sDir)
                files.AddRange(DirSearch(d))
            Next
        Catch excpt As System.Exception
            MessageBox.Show(excpt.Message)
        End Try

        Return files
    End Function

2 个答案:

答案 0 :(得分:1)

以下是我的评论中选项1的示例,即获取所有文件路径并自行过滤:

Dim folderPath = "folder path here"
Dim filePaths = Directory.GetFiles(folderPath).
                          Where(Function(s) {".txt", ".sql"}.Contains(Path.GetExtension(s))).
                          OrderBy(Function(s) Path.GetFileName(s)).
                          ToArray()

以下是选项2的示例,即按扩展程序获取路径并合并:

Dim folderPath = "folder path here"
Dim filePaths = Directory.GetFiles(folderPath, "*.txt").
                          Concat(Directory.GetFiles(folderPath, "*.sql")).
                          OrderBy(Function(s) Path.GetFileName(s)).
                          ToArray()

答案 1 :(得分:0)

另一种方法,它允许搜索多个目录并使用多种搜索模式过滤结果 它会返回一个有序的<Entity> <Type>1</Type> <Number>111</Number> <GroupList> <Group>1001: foo123String;</Group> <Group>1002: bar456String;</Group> </GroupList> </Entity>

List(Of String)

您可以向方法传递路径列表和扩展列表:

Private Function DirSearch(ByVal sDirList As String(), SearchPatter As String()) As List(Of String)
    Return sDirList.SelectMany(
        Function(dir) SearchPatter.SelectMany(
            Function(filter)
                Return Directory.GetFiles(dir, filter, SearchOption.AllDirectories)
            End Function).OrderBy(Function(xDir) xDir)).ToList()
End Function

使用以下内容提取sigle目录的内容:

Dim SearchPaths As String() = New String() {"[Directory1]", "[Directory2]"}
Dim ItemSearchPattern As String() = New String() {"*.txt", "*.sql", "*.jpg"}

Dim DirListing As List(Of String) = DirSearch(SearchPaths, ItemSearchPattern)

这是一个不区分大小写的过滤器。删除(Dim FilesInDir As List(Of String) = DirListing. Where(Function(entry) entry.ToUpper(). Contains("[DirectoryName]".ToUpper())).ToList() )区分大小写的内容。