按你的要求实现的排序代码: string[] arr = Directory.GetFiles(""); Array.Sort(arr, (fileA, fileB) => { int a, b; // 如果文件a和文件b,2个文件名都能转换成数字,就按数字排序,否则按字符串排序 if (int.TryParse(Path.GetFileNameWithoutExtension(fileA), out a) && int.TryParse(Path.GetFileNameWithoutExtension(fileB), out b)) return a.CompareTo(b); else return fileA.CompareTo(fileB); });
List<FileInfo> lst=new List<FileInfo>();foreach (string file in System.IO.Directory.GetFiles("", "*.*", System.IO.SearchOption.AllDirectories)) { lst.Add(new FileInfo(file)); } var result= (from r in lst orderby r.Name select r).Take(20); lst.Sort(delegate( FileInfo p1, FileInfo p2) { return p1.LastAccessTime.CompareTo(p2.LastAccessTime); }); public class FileComparer : IComparer<FileInfo> { public int Compare(FileInfo x, FileInfo y) { return x.LastAccessTime.CompareTo(y.LastAccessTime); } } }
public class DefineSort : IComparer { public int Compare(object x, object y) { try { FileInfo fileX = (FileInfo)x; FileInfo fileY = (FileInfo)y; return string.Compare(Path.GetFileNameWithoutExtension(fileX.Name), Path.GetFileNameWithoutExtension(fileY.Name)); } catch { throw; } } } public void Sort() { FileInfo[] files = scanDirInfo.GetFiles(_scanType, SearchOption.AllDirectories); Array.Sort(files, new DefineSort()); }
string[] arr = Directory.GetFiles(""); Array.Sort(arr, (fileA, fileB) => { int a, b; // 如果文件a和文件b,2个文件名都能转换成数字,就按数字排序,否则按字符串排序 if (int.TryParse(Path.GetFileNameWithoutExtension(fileA), out a) && int.TryParse(Path.GetFileNameWithoutExtension(fileB), out b)) return a.CompareTo(b); else return fileA.CompareTo(fileB); });
默认情况下是按字符串排序的,也就是类似这样排序:
1.jpg
11.jpg
12.jpg
...
2.jpg
21.jpg
...如果希望按你的要求排序,则要自己写
string[] arr = Directory.GetFiles("");
Array.Sort(arr, (fileA, fileB) => { int a, b;
// 如果文件a和文件b,2个文件名都能转换成数字,就按数字排序,否则按字符串排序
if (int.TryParse(Path.GetFileNameWithoutExtension(fileA), out a) && int.TryParse(Path.GetFileNameWithoutExtension(fileB), out b))
return a.CompareTo(b);
else
return fileA.CompareTo(fileB);
});
{
lst.Add(new FileInfo(file));
}
var result= (from r in lst
orderby r.Name
select r).Take(20); lst.Sort(delegate( FileInfo p1, FileInfo p2) { return p1.LastAccessTime.CompareTo(p2.LastAccessTime); });
public class FileComparer : IComparer<FileInfo>
{
public int Compare(FileInfo x, FileInfo y)
{
return x.LastAccessTime.CompareTo(y.LastAccessTime);
}
}
}
public class DefineSort : IComparer
{
public int Compare(object x, object y)
{
try
{
FileInfo fileX = (FileInfo)x;
FileInfo fileY = (FileInfo)y;
return string.Compare(Path.GetFileNameWithoutExtension(fileX.Name), Path.GetFileNameWithoutExtension(fileY.Name));
}
catch
{
throw;
}
}
}
public void Sort()
{
FileInfo[] files = scanDirInfo.GetFiles(_scanType, SearchOption.AllDirectories);
Array.Sort(files, new DefineSort());
}
Array.Sort(arr, (fileA, fileB) => { int a, b;
// 如果文件a和文件b,2个文件名都能转换成数字,就按数字排序,否则按字符串排序
if (int.TryParse(Path.GetFileNameWithoutExtension(fileA), out a) && int.TryParse(Path.GetFileNameWithoutExtension(fileB), out b))
return a.CompareTo(b);
else
return fileA.CompareTo(fileB);
});