【发布时间】:2011-12-22 14:44:39
【问题描述】:
我有一个简单的 (ASP.NET) 网页,它列出了文件夹中特定类型的文件并将它们呈现在 ListView 中。
我尝试按 LastWriteTime 降序对它们进行排序,即按相反的日期顺序。然而,虽然排序过程确实改变了数组的顺序,但它并没有正确排序。例如,LastWriteTime 为 #6/3/2011 12:00:00 的一项位于列表顶部,但 LastWriteTime 为 #12/16/2011 12:00:00 的另一项在排序后位于列表的中间。
有什么想法吗?
代码:
Dim dirInfo As New DirectoryInfo(Server.MapPath(AppSettings.Item("ContentDir")))
Dim FileArrayList As New ArrayList(dirInfo.GetFiles("*.msg", SearchOption.TopDirectoryOnly))
Dim SortDirections As New Dictionary(Of String, SqlClient.SortOrder)
With FileArrayList
.TrimToSize()
.Sort(New FileInfoComparer(SqlClient.SortOrder.Descending, "LastWriteTime"))
End With
FileInforComparer 类:
Imports System.IO
Imports System.Reflection
Public Class FileInfoComparer
Implements IComparer
Private _sortOrder As System.Data.SqlClient.SortOrder
Private _sortColumn As String
''' <summary>
''' Constructs new Comparer object, using the supplied SortOrder and SortColumn parameters
''' </summary>
''' <param name="sortOrder">Defines the SortOrder for the comparison</param>
''' <param name="sortColumn">Defines which column is sorted</param>
''' <remarks></remarks>
Public Sub New(ByVal sortOrder As System.Data.SqlClient.SortOrder, ByVal sortColumn As String)
_sortOrder = sortOrder
_sortColumn = sortColumn
End Sub
''' <summary>
''' Defines the Sorting mechanism for FileInfo objects
''' </summary>
''' <param name="x">First FileInfo object to compare</param>
''' <param name="y">Second FileInfo object to compare</param>
''' <returns></returns>
''' <remarks></remarks>
Public Overridable Overloads Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim oX_PI As PropertyInfo = CType(x, FileInfo).GetType.GetProperty(_sortColumn)
Dim oY_PI As PropertyInfo = CType(y, FileInfo).GetType.GetProperty(_sortColumn)
Dim Result As Int16 = oX_PI.GetValue(x, Nothing).CompareTo(oY_PI.GetValue(x, Nothing))
'If DESC then reverse the result
If _sortOrder = SqlClient.SortOrder.Descending Then Result = Result * -1
Return Result
End Function
End Class
【问题讨论】:
-
FileInfoComparer不是标准课程,我相信... -
是的,你是对的 - 匆忙发布!我已经更新了代码 sn-p。
-
您使用的是什么版本的 .NET?如果您可以访问 LINQ,为什么不直接使用它的
Sort方法? -
主要是我不懂LINQ!这是一两年前匆匆忙忙的事情,我只是想快速做出改变。我正在使用框架的 v4。
-
@cadrell0 - 虽然我想了解我当前方法的解决方案,但我对替代方案持开放态度。也许您可以指导我如何使用 LINQ?
标签: .net vb.net sorting directoryinfo