我有一些文件夾包含500個文件。 每個文件名是一個INT =>那意味着每個文件的名稱是例如1.txt的或40.txt如何對包含代表文件名的字符串的集合進行排序?
在我的代碼加載所有這些文件名變爲陣列
string[] allFiles = Directory.GetFiles(folderPath, "*.txt");
,現在我需要按照文件名是排序鍵的方式對文件進行排序(1.txt
)
如何做到這一點?
我有一些文件夾包含500個文件。 每個文件名是一個INT =>那意味着每個文件的名稱是例如1.txt的或40.txt如何對包含代表文件名的字符串的集合進行排序?
在我的代碼加載所有這些文件名變爲陣列
string[] allFiles = Directory.GetFiles(folderPath, "*.txt");
,現在我需要按照文件名是排序鍵的方式對文件進行排序(1.txt
)
如何做到這一點?
目錄API已經排序,但如果不處理STR英格斯權(意爲「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();
var result = allFiles.OrderBy(f => Int32.Parse(f.Split(new char[] { '.' })[0]));
如果您確信總是有正好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();