所以我正在制作一个程序,它给我一个列表,但列表不合适。我需要列出像......一样的顺序。
1.txt
2.txt
3.txt
然而,它的出现就像
2.txt
1.txt
3.txt
全部按随机顺序排列。我正在使用的是
foreach (var file in d.GetFiles("*.txt"))
{
tosend = tosend + file.Name + "\n";
}
先谢谢洛根! 更新: 我不想要一根绳子。获得文件名后,它将设置其他文件的readtext并添加它。就像[1.txt] Text
一样答案 0 :(得分:4)
使用LINQ
foreach (var file in d.GetFiles("*.txt").OrderBy(x => x.Name).ToList())
{
...
}
修改强> 如果文件将为number.txt,则可以使用
foreach (var file in d.GetFiles("*.txt").OrderBy(x => int.Parse(x.Name.Substring(0,x.Name.IndexOf(".txt"))).ToList())
{
...
}
您需要添加一些错误检查
答案 1 :(得分:1)
或者您可以对数组进行排序:
string[] files = d.GetFiles("*.txt")
Array.Sort(files, StringComparer.InvariantCulture);
foreach (var file in files)
{
tosend = tosend + file.Name + "\n";
}
答案 2 :(得分:0)
使用Linq
// top of code file
using System.Linq;
方法:
var files = d.GetFiles("*.txt").OrderBy(file => file.Name).ToList();
或根据您的示例作为字符串
string tosend = string.Join("\n", d.GetFiles("*.txt")
.Select(file => file.Name)
.OrderBy(x => x));
这使用\n
作为分隔符加入返回的有序文件名列表。
答案 3 :(得分:0)
如果您正在寻找自然分类即
1.txt
9.txt
10.txt
您可以使用 Interop 作为快速(可能是脏的)解决方案(有关详细信息,请参阅Natural Sort Order in C#)
using System.Runtime.InteropServices;
...
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string left, string right);
...
// Obtain files
var files = d.GetFiles();
// Sort files in natural order
Array.Sort(files, (left, right) => StrCmpLogicalW(left.Name, right.Name));
// combine files' names into the string
string tosend = string.Join("\n", files);