如何对出现在硬盘上的目录进行排序?
本文关键字:排序 硬盘 | 更新日期: 2023-09-27 17:52:42
我的硬盘上有例如:
dir1dir2dir3dir4…
我的代码是:DirectoryInfo dInfo = new DirectoryInfo(AutomaticsubDirectoryName);
DirectoryInfo[] subdirs = dInfo.GetDirectories();
所以在subdirs
中,我得到了所有的目录,但它们的顺序与我硬盘上的顺序不同。我如何对它们进行排序,使它们在subdirs
中的顺序与它们在硬盘上的顺序相同?
是这样解决的:
DirectoryInfo[] subdirs = dInfo.GetDirectories().OrderBy(d =>
{
int i = 0;
if (d.Name.Contains("Lightning ") && d.Name.Contains(" Length") && d.Name.IndexOf("Lightning ") < d.Name.IndexOf(" Length"))
{
string z = d.Name.Substring(("Lightning ").Length);
string f = z.Substring(0, z.IndexOf(" Length"));
if (Int32.TryParse(f, out i))
return i;
else
return -1;
}
else
return -1;
}).ToArray();
工作完美。
Windows使用的字符串比较函数是公开给所有人使用的。因此,您需要一点pinvoke来获得与Explorer使用的完全相同的排序顺序。将其封装在IComparer<>中,这样您就可以将其传递给Array.Sort()或OrderBy() Linq子句:
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
public class LogicalComparer : IComparer<string> {
public int Compare(string x, string y) {
return StrCmpLogicalW(x, y);
}
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
private static extern int StrCmpLogicalW(string s1, string s2);
}
假设您正在谈论文件系统以及像Windows资源管理器这样的软件如何显示名称,我想你正在谈论名称的自然排序。阅读此处:http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html
Craetion time
是它们如何出现在硬盘上的合理标准。
DirectoryInfo[] subdirs = dInfo.GetDirectories().OrderBy(d => d.CreationTime).ToArray();
是这样解决的:
DirectoryInfo[] subdirs = dInfo.GetDirectories().OrderBy(d =>
{
int i = 0;
if (d.Name.Contains("Lightning ") && d.Name.Contains(" Length") && d.Name.IndexOf("Lightning ") < d.Name.IndexOf(" Length"))
{
string z = d.Name.Substring(("Lightning ").Length);
string f = z.Substring(0, z.IndexOf(" Length"));
if (Int32.TryParse(f, out i))
return i;
else
return -1;
}
else
return -1;
}).ToArray();
工作完美。