我在以升序形式排序数组时遇到问题,我不知道如何修复它。
string[] filePath = Directory.GetFiles(fbdialog.SelectedPath.ToString(), "*", SearchOption.AllDirectories);
Array.Sort(filePath);
以下是filePath的值。
"C:\\Documents and Settings\\20110909\\DAR-AAP070127-20110909.ods"
"C:\\Documents and Settings\\20110909\\DAR-ALA061452-09050909.xls"
"C:\\Documents and Settings\\20110819\\DAR-AAP070127-20110819.xls"
我想看起来像这样..
"C:\\Documents and Settings\\20110909\\DAR-AAP070127-20110909.ods"
"C:\\Documents and Settings\\20110819\\DAR-AAP070127-20110819.xls"
"C:\\Documents and Settings\\20110909\\DAR-ALA061452-09050909.xls"
先谢谢。
答案 0 :(得分:1)
按文件名排序:
var result = filePath.OrderBy(p => Path.GetFileName(p));
答案 1 :(得分:1)
这是一个使用LINQ的版本。
另请注意,如果您只需要文件名而不是文件本身,则可以使用DirectoryInfo.GetFiles()
而不是Directory.GetFiles()
。
var filePaths = new DirectoryInfo(fbdialog.SelectedPath.ToString())
.GetFiles("*", SearchOption.AllDirectories)
.OrderBy(f => f.Name)
.Select(f => f.FullName);
答案 2 :(得分:1)
按“EmpNo”排序,例如“AAP070127”:
string[] sortedFiles = Directory
.GetFiles(fbdialog.SelectedPath, "*", SearchOption.AllDirectories)
.OrderBy(n => Path.GetFileName(n).Split('-')[1])
.ToArray();
<强>更新强>
如果你提到使用C#2.0而没有Linq。以下使用自定义比较器仅比较文件名中的“EmpNo”代码。该解决方案希望您的文件名格式正确,即它们包含您的示例文件名格式的“EmpNo”。
[Test]
public void Sort()
{
string[] files = Directory
.GetFiles(fbdialog.SelectedPath, "*", SearchOption.AllDirectories);
Array.Sort(files, new EmpNoFileComparer());
}
private class EmpNoFileComparer : IComparer<string>
{
public int Compare(string x, string y)
{
string empNoX = Path.GetFileName(x).Split('-')[1];
string empNoY = Path.GetFileName(y).Split('-')[1];
return empNoX.CompareTo(empNoY);
}
}
答案 3 :(得分:0)
using System.Linq; // requires .NET 3.5+
IEnumerable<string> r =
new DirectoryInfo(fbdialog.SelectedPath) // no need for ToString()
.GetFiles("*", SearchOption.AllDirectories)
.Select(f => f.Name) // DAR-ALA061452-09050909.xls
.Select(f => f.Substring(4, 9)) // ALA061452
.OrderBy(f => f);
或更短:
new DirectoryInfo(fbdialog.SelectedPath)
.GetFiles("*", SearchOption.AllDirectories)
.OrderBy(f => f.Name.Substring(4, 9));