首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序Directory.GetFiles()

排序Directory.GetFiles()
EN

Stack Overflow用户
提问于 2008-09-09 20:33:41
回答 13查看 158.5K关注 0票数 67

System.IO.Directory.GetFiles()返回一个string[]。返回值的默认排序顺序是什么?我是在说名字,但如果是的话,目前的文化对它的影响有多大?你能把它改为类似于创作日期的东西吗?

更新: MSDN指出,.Net 3.5不能保证排序顺序,但是该页面的2.0版本根本没有说任何话,任何页面都不会帮助您按创建或修改时间进行排序。一旦有了数组(它只包含字符串),信息就会丢失。我可以构建一个比较器来检查它所获得的每个文件,但这意味着在假定.GetFiles()方法已经这样做时重复访问文件系统。看起来效率很低。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2008-09-09 20:47:03

如果您对CreationTime等文件的属性感兴趣,那么使用System.IO.DirectoryInfo.GetFileSystemInfos()就更有意义了。然后,您可以使用System.Linq中的一种扩展方法对它们进行排序,例如:

代码语言:javascript
复制
DirectoryInfo di = new DirectoryInfo("C:\\");
FileSystemInfo[] files = di.GetFileSystemInfos();
var orderedFiles = files.OrderBy(f => f.CreationTime);

编辑-对不起,我没有注意到.NET2.0标签,所以忽略LINQ排序。不过,使用System.IO.DirectoryInfo.GetFileSystemInfos()的建议仍然有效。

票数 112
EN

Stack Overflow用户

发布于 2008-11-10 20:57:43

在.NET 2.0中,需要使用Array.Sort对FileSystemInfos进行排序。

此外,您还可以使用比较器委托来避免仅为比较而声明类:

代码语言:javascript
复制
DirectoryInfo dir = new DirectoryInfo(path);
FileSystemInfo[] files = dir.GetFileSystemInfos();

// sort them by creation time
Array.Sort<FileSystemInfo>(files, delegate(FileSystemInfo a, FileSystemInfo b)
                                    {
                                        return a.LastWriteTime.CompareTo(b.LastWriteTime);
                                    });
票数 13
EN

Stack Overflow用户

发布于 2008-09-29 15:12:40

下面是我使用过的VB.Net解决方案。

首先,做一个类来比较日期:

代码语言:javascript
复制
Private Class DateComparer
    Implements System.Collections.IComparer

    Public Function Compare(ByVal info1 As Object, ByVal info2 As Object) As Integer Implements System.Collections.IComparer.Compare
        Dim FileInfo1 As System.IO.FileInfo = DirectCast(info1, System.IO.FileInfo)
        Dim FileInfo2 As System.IO.FileInfo = DirectCast(info2, System.IO.FileInfo)

        Dim Date1 As DateTime = FileInfo1.CreationTime
        Dim Date2 As DateTime = FileInfo2.CreationTime

        If Date1 > Date2 Then Return 1
        If Date1 < Date2 Then Return -1
        Return 0
    End Function
End Class

然后在排序数组时使用比较器:

代码语言:javascript
复制
Dim DirectoryInfo As New System.IO.DirectoryInfo("C:\")
Dim Files() As System.IO.FileInfo = DirectoryInfo.GetFiles()
Dim comparer As IComparer = New DateComparer()
Array.Sort(Files, comparer)
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档