vb.net - 将目录放入数组,然后按创建日期对其文件进行排序
问题描述
我需要按创建日期对目录文件进行排序。我在这里和网上查看了解决方案;这主要指向我无法使用的 linq 用法,因为我的应用程序是 .net framework 2.0 的遗留应用程序。我也在使用.net vb。其他解决方案需要一个我也不想使用的类。我需要一个简单的排序解决方案,它将在一个数组中显示我的所有文件,从文件创建的最低日期到最高日期排序。
下面是我目前正在使用的代码;默认情况下按文件名排序。
Dim trydef1 As String = D_Drive & "\Cloud Documents\"
Dim txtFiles = Directory.GetFiles(trydef1)
For Each filenm As String In txtFiles
'process the file here
Next
解决方案
如果不能使用 lambda 表达式,则必须使用类。阶级并没有什么坏处。与自定义比较器结合使用Array.Sort
。不使用类的唯一另一种方法是自己实现类似 QuickSort 的排序算法。编写类更容易。
如果第一个值小于第二个值,比较器返回负值,如果两者相等则返回 0,如果第一个值大于第二个值,则返回正值。
public static void Sort (Array array, System.Collections.IComparer comparer);
您必须自己编写自定义比较器。您可以像在模块中一样在类中编写函数。使用上的主要区别在于类是创建对象的模板。因此,您必须使用New FileByDateComparer()
. 优点是您可以将此对象作为参数传递给Array.Sort
方法。你不能用模块做的事情。
Public Class FileByDateComparer
Implements IComparer
Public Function Compare(a As Object, b As Object) As Integer _
Implements IComparer.Compare
Dim fileA = DirectCast(a, FileInfo)
Dim fileB = DirectCast(b, FileInfo)
Dim comp = fileA.CreationTime.CompareTo(fileB.CreationTime)
If comp <> 0 Then 'Dates are different
Return comp
End If
'Dates are equal, sort by name
Return fileA.Name.CompareTo(fileB.Name)
End Function
End Class
比较器假定它是传递FileInfo
对象而不是文件名作为字符串。
Dim files As FileInfo() = New DirectoryInfo(trydef1).GetFiles()
Array.Sort(files, New FileByDateComparer())
For Each fileInfo As FileInfo In files
Console.WriteLine($"{fileInfo.Name} {fileInfo.CreationTime}")
Next
推荐阅读
- javascript - 选择一条线来改进。初学者效率代码问题
- cloudflare - 在 Cloudflare 工作器中缓存每个获取请求
- c# - 成功保存记录后显示消息
- java - setOnClickListener 中的 SQLException(new View.OnClickListener() - Android Studio
- javascript - 使用 FileReader 发送原始文件数据
- lotus-domino - 在 Domino 服务器端签署数据库
- dotnetnuke - 在 2sxc 应用程序中创建新视图时,无法设置“视图中使用的数据模型”字段
- apex - 异步函数中的 RefreshApex
- vuejs2 - 如何在 vue js 中使用 bootstrap swiper
- c# - Azure App Config HMAC 身份验证返回未经授权的错误