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 に答える