我有一个目录中的文本文件。文本文件在该目录中按名称排序。我想将那些具有相同顺序(按名称)的文本文件的路径读入数组。我正在使用以下代码:
string[] textpaths = Directory.GetFiles(filepath + "\\source", "*",
SearchOption.AllDirectories);
但是我得到的路径数组没有相同的目录顺序。有人可以帮忙吗?提前致谢。
然后订购它们,有什么大不了的?
string[] textpaths = Directory.GetFiles(
filepath + "\\source",
"*",
SearchOption.AllDirectories
).OrderBy(x => x.Name).ToArray();
只需对结果数组进行排序:
IEnumerable<string> textpaths = Directory.GetFiles(
Path.Combine(filepath, "source"),
"*",
SearchOption.AllDirectories
).OrderBy(f=>f);
您也可以使用此语法,具体取决于您的个人喜好:
var textPaths = from file in Directory.GetFiles(Path.Combine(filepath, "source"), "*", SearchOption.AllDirectories)
order by file
select file;
您始终可以按顺序使用简单的 linq 查询对文件进行排序。
string[] textpaths = Directory.GetFiles(filepath + "\\source", "*",
SearchOption.AllDirectories).OrderBy(x=>x).ToArray();
或者,您可以DiretoryInfo.GetFiles使用其他属性对其进行排序。
// Sort by full name
string[] textpaths = new DirectoryInfo("c:\\test").GetFiles("*",
SearchOption.AllDirectories).OrderBy(x=>x.FullName).Select(x=>x.FullName).ToArray();
// Sort by creation time
string[] textpaths = new DirectoryInfo("c:\\test").GetFiles("*",
SearchOption.AllDirectories).OrderBy(x=>x.CreationTime).Select(x=>x.FullName).ToArray();
.Net 不使用您在文件管理器中应用的排序。但是您可以手动订购文件:
IEnumerable<string> orderedPaths = textpaths.OrderBy(path => path);
或在单个查询中:
IEnumerable<string> orderedPaths =
Directory.GetFiles(filepath + "\\source", "*", SearchOption.AllDirectories)
.OrderBy(path => path);
之后使用 linq 对数组进行排序
尝试
string[] textpaths = DirectoryInfo.GetFiles(filepath + "\\source", "*",SearchOption.AllDirectories);
Array.Sort(textpaths , delegate(FileInfo f1, FileInfo f2) {
return f1.Name.CompareTo(f2.Name);
});