2013-09-01 7 views
0

Мне нужно получить список файлов каталога, отфильтровать по нескольким расширениям ... и отсортировать!Использование Directory.GetFiles() С несколькими расширениями и порядком сортировки

Я использую это, что это самый быстрый способ я нашел, чтобы получить реж содержание фильтрованного на нескольких расширениях:

Dim ext As String() = {"*.jpg", "*.bmp","*png"} 
Dim files As String() = ext.SelectMany(Function(f) Directory.GetFiles(romPath, f)).ToArray 
Array.Sort(files) 

, а затем использовать то массив.

Мне было интересно (и это мой вопрос;)), если бы был способ сделать сортировку В той же главной строке? Разновидность:

Dim files As String() = ext.SelectMany(Function(f) Directory.GetFiles(romPath, f).**Order By Name**).ToArray 

и, если да, то если бы я набирать скорость, делая это вместо сортировки массива в конце (но я бы сделал мой тест и report..as скоро я получу решение! !)? Спасибо за помощь!

ответ

1

Вы можете использовать OrderBy) Linq метод (расширение, например:

Dim ext = {"*.jpg", "*.bmp", "*png"} 
    Dim files = ext.SelectMany(Function(f) Directory.GetFiles(romPath, f)). _ 
       OrderBy(Function(f) f). _ 
       ToArray() 

Это не будет никакой разницы в скорости, сортировка по сути O (Nlog (п)) сложность. Это делает сделать разницу в хранении, OrderBy() имеет требование хранения O (n). Array.Sort() сортируется на месте. Не большое значение для небольших значений n, как вы ожидали бы в дисковой директории.

0
enter code hereIf Count = 4 Then 
     MsgBox("done") 
    ElseIf Count = 0 
     Dim aryFi As IO.FileInfo() = (di.GetFiles("*.mp4", IO.SearchOption.AllDirectories)) 
     For Each fi In aryFi 
      Dim ico As Icon = Icon.ExtractAssociatedIcon(fi.FullName) 
      Dim imagelistsmall As New ImageList() 
      Dim item As New ListViewItem(fi.FullName) 
      Dim li As ListViewItem 
      Try 
       li = ListView1.Items.Add(fi.Name, ImageList1.Images.Count) 
       li.Tag = fi.FullName 
       ImageList1.Images.Add(Bitmap.FromFile(fi.FullName)) 

       ListView1.LargeImageList = ImageList1 
       ListView1.View = View.List 
       Me.Controls.Add(ListView1) 

      Catch ex As Exception 

      End Try 
     Next 
     Count = (Count.ToString + 1) 
     sack() 

    ElseIf Count = 1 
     Dim aryFi2 As IO.FileInfo() = (di.GetFiles("*.mov", IO.SearchOption.AllDirectories)) 
     For Each fi In aryFi2 

      Dim ico As Icon = Icon.ExtractAssociatedIcon(fi.FullName) 
      Dim imagelistsmall As New ImageList() 
      Dim item As New ListViewItem(fi.FullName) 
      Dim li As ListViewItem 
      Try 
       li = ListView1.Items.Add(fi.Name, ImageList1.Images.Count) 
       li.Tag = fi.FullName 
       ImageList1.Images.Add(Bitmap.FromFile(fi.FullName)) 

       ListView1.LargeImageList = ImageList1 
       ListView1.View = View.List 
       Me.Controls.Add(ListView1) 

      Catch ex As Exception 

      End Try 
     Next 
     Count = (Count.ToString + 1) 
     sack() 
    ElseIf Count = 2 
     Dim aryFi3 As IO.FileInfo() = (di.GetFiles("*.flv", IO.SearchOption.AllDirectories)) 
     For Each fi In aryFi3 

      Dim ico As Icon = Icon.ExtractAssociatedIcon(fi.FullName) 
      Dim imagelistsmall As New ImageList() 
      Dim item As New ListViewItem(fi.FullName) 
      Dim li As ListViewItem 
      Try 
       li = ListView1.Items.Add(fi.Name, ImageList1.Images.Count) 
       li.Tag = fi.FullName 
       ImageList1.Images.Add(Bitmap.FromFile(fi.FullName)) 

       ListView1.LargeImageList = ImageList1 
       ListView1.View = View.List 
       Me.Controls.Add(ListView1) 

      Catch ex As Exception 

      End Try 
     Next 
     Count = (Count.ToString + 1) 
     sack() 
    ElseIf Count = 3 
     Dim aryFi4 As IO.FileInfo() = (di.GetFiles("*.avi", IO.SearchOption.AllDirectories)) 
     For Each fi In aryFi4 

      Dim ico As Icon = Icon.ExtractAssociatedIcon(fi.FullName) 
      Dim imagelistsmall As New ImageList() 
      Dim item As New ListViewItem(fi.FullName) 
      Dim li As ListViewItem 
      Try 
       li = ListView1.Items.Add(fi.Name, ImageList1.Images.Count) 
       li.Tag = fi.FullName 
       ImageList1.Images.Add(Bitmap.FromFile(fi.FullName)) 

       ListView1.LargeImageList = ImageList1 
       ListView1.View = View.List 
       Me.Controls.Add(ListView1) 

      Catch ex As Exception 

      End Try 
     Next 
     Count = (Count.ToString + 1) 
     sack() 
    End If