Getfile с несколькими фильтрами расширений и упорядочением по имени файла - PullRequest
0 голосов
/ 22 мая 2018

Я работаю над настольным приложением 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 голосов
/ 22 мая 2018

Альтернативный метод, который позволяет искать несколько каталогов и фильтровать результаты, используя несколько шаблонов поиска.
Возвращает упорядоченный 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

Вы можете передать методсписок путей и список расширений:

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()

Это нечувствительный к регистру фильтр.Удалить (ToUpper()) для чувствительного к регистру.

0 голосов
/ 22 мая 2018

Вот пример варианта 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()
...