System.IO.Directory.GetFiles()返回一个string[].返回值的默认排序顺序是什么?我是按名字假设,但如果是这样的话,目前的文化对它有多大影响呢?你能把它改成创建日期吗?
更新: MSDN指出.Net 3.5不保证排序顺序,但2.0版本的页面根本没有说什么,这两个页面都不会帮助您按创建或修改时间等方式进行排序.一旦你有了数组(它只包含字符串),这些信息就会丢失.我可以构建一个比较器来检查它获得的每个文件,但这意味着重复访问文件系统,大概是.GetFiles()方法已经这样做了.似乎非常低效.
Ian*_*son 109
如果您对诸如CreationTime等文件的属性感兴趣,那么使用System.IO.DirectoryInfo.GetFileSystemInfos()会更有意义.然后,您可以使用System.Linq中的一个扩展方法对这些进行排序,例如:
DirectoryInfo di = new DirectoryInfo("C:\\");
FileSystemInfo[] files = di.GetFileSystemInfos();
var orderedFiles = files.OrderBy(f => f.CreationTime);
Run Code Online (Sandbox Code Playgroud)
编辑 - 抱歉,我没有注意到.NET2.0标记,因此忽略LINQ排序.尽管如此,使用System.IO.DirectoryInfo.GetFileSystemInfos()的建议仍然存在.
Chr*_*her 13
在.NET 2.0中,您需要使用Array.Sort对FileSystemInfos进行排序.
此外,您可以使用Comparer委托来避免仅为比较声明一个类:
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);
});
Run Code Online (Sandbox Code Playgroud)
seb*_*aan 12
这是我用过的VB.Net解决方案.
首先制作一个比较日期的课程:
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
Run Code Online (Sandbox Code Playgroud)
然后在对数组进行排序时使用比较器:
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)
Run Code Online (Sandbox Code Playgroud)
Dim Files() As String
Files = System.IO.Directory.GetFiles("C:\")
Array.Sort(Files)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
140991 次 |
| 最近记录: |