asp.net VB.NET目录.GetFiles按日期排序

k4emjkb1  于 2022-12-15  发布在  .NET
关注(0)|答案(2)|浏览(219)

我有一个XML文件目录。如何只抓取最近30天内创建的文件并按升序排序?如果有更有效的解决方案,我不一定要使用Directory.GetFiles。
然后,创建一个文件列表并将其绑定到gridView,在该gridView中,我需要文件名和路径。我显示文件名并使用RowDataBound事件中的Path值来构建指向该文件的超链接。
谢谢!\m/ \m/

Dim filePaths() As String = Directory.GetFiles("C:\XmlFiles\")
Dim files As List(Of ListItem) = New List(Of ListItem)

For Each filePath As String In filePaths
    files.Add(New ListItem(Path.GetFileName(filePath), filePath))
Next

gv.DataSource = files
gv.DataBind()

字符串

ubof19bj

ubof19bj1#

我们可以做得更好一点,仅仅是获取名称,然后按时间排序,就需要为这两个属性分别从硬盘中取出数据,这是很慢的,通过切换到DirectoryInfo,我们可以将这一过程减少到每个文件从硬盘取出一次:

Dim filesByDate = DirectoryInfo.EnumerateFiles("C:\XmlFiles\").
                     Where(Function(f) f.CreationTime > DateTime.Today.AddDays(-30)).
                     OrderBy(Function(f) f.CreationTime).
                     Select(Function(f) f.Name)
gv.DataSource = filesByDate
gv.DataBind()

这并不是说这种差异可能会提高程序的性能,但减少磁盘I/O总是很好的:)
这也是一个使用GetX而不是EnumerateX * 可能 * 更好的情况,一般来说,您希望更喜欢任何将“enumerate”而不是“get”的东西,因为这样可以减少内存使用,并且能够在第一项可用时立即开始处理,而不是等到最后一项可用时才开始处理,不过在这种情况下,有一个“机会”,您可以用内存来换取磁盘I/O。我不熟悉这些方法的内部实现,但GetFileSystemInfos()有可能在一次或几次磁盘访问中获得“所有"文件的信息,这将是一个巨大的胜利。但同样...我不熟悉这里的细节;你得自己测试哪种情况更适合你。

6kkfgxo0

6kkfgxo02#

您可以使用LINQ:

Dim filePathsSortedByDate = From f In Directory.EnumerateFiles("C:\XmlFiles\")
                            let fileCreationTime = File.GetCreationTime(f)
                            Where (Date.Today - fileCreationTime.Date).Days <= 30 
                            Order By fileCreationTime
                            Select New ListItem(Path.GetFileName(f), f)
Dim files As List(Of ListItem) = filePathsSortedByDate.ToList()

相关问题