0

我有以下代码

 Public Function ListDirLatest(ByVal Dir As String, ByVal Amount As Integer) As DataTable        
    Dim dt As DataTable = ListDir(Dir)
    If (dt Is Nothing) Then
        Return Nothing
    Else
        Return dt ' This is where i would like to implement the latest x-files logic
    End If
End Function

Private Function ListDir(ByVal Dir As String) As DataTable
    If Directory.Exists(Dir) Then
        Dim dt As DataTable = GetDT()
        Dim dirinfo As New DirectoryInfo(Dir)
        For Each fsi As FileSystemInfo In dirinfo.GetFileSystemInfos(".txt")
            Dim dr As DataRow = dt.NewRow()
            dr("FileName") = fsi.Name()
            dr("FileDate") = fsi.CreationTime()
        Next
        Return dt
    Else
        Return Nothing
    End If
End Function

Private Function GetDT() As DataTable
    'Create DataTable to hold results
    Dim dt As New DataTable("DirList")
    Dim st As System.Type = System.Type.GetType("System.String")
    dt.Columns.Add("FileName", st)
    dt.Columns.Add("FileDate", st)
    Return dt
End Function

目前该ListDirLatest函数将返回目录中的所有文件。如何更改代码以使其仅返回Amount 参数指定的最新“x”文件。

为了澄清我想返回目录中最新的“x”文件。

4

2 回答 2

2

您可以使用一点 Linq 和对 System.Data.DataSetExtensions
( http://msdn.microsoft.com/en-us/library/system.data.datatableextensions(v=vs.100) 的引用来解决您的问题。 .aspx )

Public Function ListDirLatest(ByVal Dir As String, ByVal Amount As Integer) As DataTable        
    Dim dt As DataTable = ListDir(Dir)
    If (dt Is Nothing) Then
        Return Nothing
    Else
        Dim r = from myRow in dt.AsEnumerable()
                Order By("FileDate DESC")
                Take(Amount)
        dt = r.CopyToDataTable()
        return dt
    End If
End Function

此外,ListDir 函数有几个错误

  • 将行信息添加到返回的DataTable中
  • 为 GetFileSystemInfos 使用正确的模式

    Function ListDir(ByVal Dir As String) As DataTable
        If Directory.Exists(Dir) Then
            Dim dt As DataTable = GetDT()
            Dim dirinfo As New DirectoryInfo(Dir)
            For Each fsi As FileSystemInfo In dirinfo.GetFileSystemInfos("*.txt")
                Dim dr As DataRow = dt.NewRow()
                dr("FileName") = fsi.Name()
                dr("FileDate") = fsi.CreationTime()
                dt.Rows.Add(dr)
            Next
            Return dt
        Else
            Return Nothing
        End If
    End Function
    
于 2012-11-06T09:56:22.117 回答
0

如果您的意思是要返回的文件数量,那么您需要执行以下操作:

首先更改 ListDir 函数的标题以接受一个参数以允许计算要返回的文件数,并从第一个函数传递该参数,

Public Function ListDirLatest(ByVal Dir As String, ByVal Amount As Integer) As DataTable        
    Dim dt As DataTable = ListDir(Dir, Amount)
    If (dt Is Nothing) Then
        Return Nothing
    Else
        Return dt ' This is where i would like to implement the latest x-files logic
    End If
End Function

Private Function ListDir(ByVal Dir As String, ByVal Amount As Integer) As DataTable
    If Directory.Exists(Dir) Then
        Dim dt As DataTable = GetDT()
        Dim dirinfo As New DirectoryInfo(Dir)
        Dim cnt as Integer = 0
        For Each fsi As FileSystemInfo In dirinfo.GetFileSystemInfos(".txt")
            Dim dr As DataRow = dt.NewRow()
            dr("FileName") = fsi.Name()
            dr("FileDate") = fsi.CreationTime()
            cnt += 1
            if cnt >= Amount Then Exit For
        Next
        Return dt
    Else
        Return Nothing
    End If
End Function
于 2012-11-06T09:45:09.107 回答