繁体   English   中英

VB.NET Directory.GetFiles按日期排序

[英]VB.NET Directory.GetFiles Sort by Date

我有Xml文件的目录。 如何仅捕获最近30天创建的文件并按升序对其进行排序? 如果有更有效的解决方案,我就不必使用Directory.GetFiles。

然后,我创建文件列表并将其绑定到需要文件名和路径的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()

您可以使用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()

我们可以做的更好。 仅获取名称,然后再按时间排序,就需要将这两个属性分别从硬盘驱动器中取出,这很慢。 通过切换到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 通常,您希望使用将“枚举”而不是“获取”的任何内容,因为减少了内存使用,并且具有在第一个项目可用时立即开始处理的能力,而不是等到最后一个项目可用时才开始处理。 但是,在这种情况下,您有机会将内存使用量换成磁盘I / O。 我不熟悉这些方法的内部实现,但是GetFileSystemInfos()可能在一次或几次磁盘访问中就获取所有文件的信息,这将是一个巨大的胜利。 但是,再次……我对这里的细节不熟悉。 您必须自己测试一下,哪种情况更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM