2010-09-22 3 views
0

Я использую следующий код для поиска на моем компьютере файлов с расширениями certian. В настоящее время я ищу файлы .eml. В этом коде перечислены все найденные файлы. Мне нужно ввести путь 10 самых последних файлов к моему списку. Как мне это сделать? СпасибоПолучение только 10 последних файлов

Dim DriveLetter As String = "c:\" '" 
Dim Ext As String = ".eml" 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Me.SearchPath(DriveLetter) 
End Sub 

Sub SearchPath(ByVal Path As String) 
    Dim DirParent As New IO.DirectoryInfo(Path) 
    ''# Me.AddResults("Searching: " & DirParent.FullName) 
    Dim ListFiles() As IO.FileInfo 

    Try 
     ListFiles = DirParent.GetFiles("*" & Ext) 
     For Each SingleFile In ListFiles 
      Me.AddResults("Found: " & SingleFile.FullName) 
      Application.DoEvents() 
     Next 

    Catch ex As Exception 
     ''# Me.AddResults("GET FILES ERROR: " & ex.Message) 

    End Try 

    Try 
     Dim DirChildren() As IO.DirectoryInfo = DirParent.GetDirectories 

     For Each DirEnum In DirChildren 
      SearchPath(DirEnum.FullName) 
     Next 

    Catch ex As Exception 
     ''# Me.AddResults("GET DIRS ERROR: " & ex.Message) 

    End Try 
End Sub 

Sub AddResults(ByVal ResultString As String) 
    lstFiles.Items.Add(ResultString) 
    Application.DoEvents() 
End Sub 

ответ

1

Вместо того, чтобы добавлять найденные файлы в каталог списка, сначала добавьте найденную FileInfo в список. Когда все файлы были найдены, используйте запрос linq, чтобы найти 10 последних файлов и добавить их в список.

Imports System 
Imports System.Collections.Generic 
Imports System.IO 
Imports System.Linq 

Private Sub Button1_Click(ByVal sender As System.Object, 
          ByVal e As System.EventArgs 
) Handles button1.Click 

    ' Note C:\\ is required to stackoverflow.com formatting ' 
    Dim foundFiles = SearchPath("C:\\", ".eml") 
    Dim recentFiles = From file In foundFiles 
         Order By File.LastWriteTime Descending 
         Take 10 

    lstFiles.Items.Clear() 

    For Each file In recentFiles 

     lstFiles.Items.Add(file.FullName) 

    Next 

End Sub 

Function SearchPath(ByVal path As String, 
        ByVal ext As String 
) As List(Of FileInfo) 

    Dim dirParent = New IO.DirectoryInfo(path) 
    Dim foundFiles = New List(Of FileInfo) 

    foundFiles.AddRange(dirParent.GetFiles("*" & ext)) 

    For Each directory In dirParent.GetDirectories() 

     Try 

      foundFiles.AddRange(SearchPath(directory.FullName, ext)) 

     Catch ex As System.UnauthorizedAccessException 

      ' Ignore these exceptions. ' 

     End Try 

    Next 

    Return foundFiles 

End Function 
+0

Большое спасибо. Но я не знаю LINQ. Пожалуйста, измените мой код, как он должен использоваться. Это будет большой поддержкой. Спасибо –

+0

@Tim: 'ToList' является избыточным в любом случае. Остальное выглядит хорошо. –

+0

Код содержит следующие ошибки: –