2010-09-22 79 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。請修改我的代碼應該如何使用。這將是一個很大的忙。謝謝 – 2010-09-22 09:37:49

+0

@Tim:無論如何'ToList'都是多餘的。其餘的看起來不錯。 – 2010-09-22 09:39:21

+0

代碼提供了以下錯誤 – 2010-09-22 09:57:37