我有一些包含500个文件的文件夹。 每个文件名都是int =>这意味着每个文件名都是例如1.txt或40.txt
在我的代码上,我将所有这些文件名加载到数组
string[] allFiles = Directory.GetFiles(folderPath, "*.txt");
现在我需要对文件进行排序,文件名是排序键(1.txt
)
怎么做?
答案 0 :(得分:2)
目录API有排序,但是如果这不是正确处理字符串(意思是“1.txt”后跟“10.txt”而不是“2.txt”),你可以试试这个:
string[] allFiles = Directory.GetFiles(folderPath, "*.txt")
.OrderBy(file =>
int.Parse(file.Substring(0, file.Length - 4)))
.ToArray();
这假定所有文件格式正确。如果这是有问题的,也许你想要这样的东西:
string[] allFiles = Directory.GetFiles(folderPath, "*.txt")
.Select(file => {
var fileNamber;
if(!int.TryParse(
file.Substring(0, file.Length - 4), out fileNamber)
return (int?)null;
return (int?)fileNamber;
})
.Where(fileNamber => fileNamber.HasValue)
.OrderBy(fileNamber => fileNamber.Value)
.Select(fileNamber => fileNamber.Value + ".txt")
.ToArray();
答案 1 :(得分:1)
var result = allFiles.OrderBy(f => Int32.Parse(f.Split(new char[] { '.' })[0]));
答案 2 :(得分:1)
如果您确定总有500个文件,并且它们从1.txt
命名为500.txt
,那么您只需手动生成阵列,而不是扫描目录:
string[] allFiles = Enumerable
.Range(1, 500)
.Select(i => Path.Combine(folderPath, $"{i}.txt"))
.ToArray();
否则,将没有扩展名的文件名解析为int以对其进行排序:
string[] allFiles = Directory
.GetFiles(folderPath, "*.txt")
.OrderBy(x => int.Parse(x.Substring(0, x.Length - 4)))
.ToArray();