Asp.net VB.NET Directory.GetFiles按日期排序

Asp.net VB.NET Directory.GetFiles按日期排序,asp.net,vb.net,Asp.net,Vb.net,我有一个Xml文件目录。如何仅获取过去30天内创建的文件并按升序排序?如果有更有效的解决方案,我不一定要使用Directory.GetFiles 然后,我创建一个文件列表并将其绑定到一个gridView,其中需要文件名和路径。我显示文件名并使用RowDataBound事件中的路径值来构建指向该文件的超链接 谢谢\m/\m/ Dim filePaths() As String = Directory.GetFiles("C:\XmlFiles\") Dim files As List(Of Lis

我有一个Xml文件目录。如何仅获取过去30天内创建的文件并按升序排序?如果有更有效的解决方案,我不一定要使用Directory.GetFiles

然后,我创建一个文件列表并将其绑定到一个gridView,其中需要文件名和路径。我显示文件名并使用RowDataBound事件中的路径值来构建指向该文件的超链接

谢谢\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()
Dim filepathsortedbydate=来自目录.EnumerateFiles(“C:\XmlFiles\”)中的f
让fileCreationTime=File.GetCreationTime(f)

Where(Date.Today-fileCreationTime.Date).Days我们可以做得更好一些。只需获取名称,然后按时间排序,就需要对两个属性分别访问硬盘,这很慢。通过切换到
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()
可以在一次或几次磁盘访问中获取所有文件的信息,这将是一个巨大的胜利。但是再一次。。。我不熟悉这里的细节;您必须自己测试哪一个更适合您的情况。

谢谢!我只需要抓取在过去30天内创建的文件。@80sRocker不要忘记
日期。今天
可以在代码运行时更改,以防发生重大变化。