Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中读取与目录中的文本文件路径顺序相同的文本文件路径#_C#_C# 4.0 - Fatal编程技术网

C# 在c中读取与目录中的文本文件路径顺序相同的文本文件路径#

C# 在c中读取与目录中的文本文件路径顺序相同的文本文件路径#,c#,c#-4.0,C#,C# 4.0,我有一个目录中的文本文件。文本文件在该目录中按名称排序。我想将那些顺序相同(按名称)的文本文件的路径读入数组。我正在使用以下代码: string[] textpaths = Directory.GetFiles(filepath + "\\source", "*", SearchOption.AllDirectories); 但是我得到的路径数组没有相同的目录顺序。有人能帮忙吗? 提前谢谢 那就点吧,有什么大不了的 string[] textpaths = Directory.Ge

我有一个目录中的文本文件。文本文件在该目录中按名称排序。我想将那些顺序相同(按名称)的文本文件的路径读入数组。我正在使用以下代码:

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);  

.Net不使用您在文件管理器中应用的排序。但您可以手动订购文件:

IEnumerable<string> orderedPaths = textpaths.OrderBy(path => path);
IEnumerable orderedPaths=textpaths.OrderBy(path=>path);
或在单个查询中:

IEnumerable<string> orderedPaths = 
   Directory.GetFiles(filepath + "\\source", "*", SearchOption.AllDirectories)
            .OrderBy(path => path);
IEnumerable OrderedPath=
Directory.GetFiles(filepath+“\\source”、“*”、SearchOption.AllDirectories)
.OrderBy(路径=>path);

之后使用linq对数组排序

尝试

string[] textpaths = DirectoryInfo.GetFiles(filepath + "\\source", "*",SearchOption.AllDirectories);  
Array.Sort(textpaths , delegate(FileInfo f1, FileInfo f2) {
return f1.Name.CompareTo(f2.Name);
});

您始终可以使用简单的linq查询按哪个顺序对文件进行排序

string[] textpaths = Directory.GetFiles(filepath + "\\source", "*",    
SearchOption.AllDirectories).OrderBy(x=>x).ToArray();  
或者,您可以使用其他属性对其进行排序

// 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();  

不,您不能使用内置函数按名称顺序读取路径。写你自己的…第一个缓冲区比排序哪个顺序,字母顺序??使用按名称排序我相信
Directory.GetFiles
返回字符串,而不是
FileInfo
objects数组@somebodyyouknown。我试过你的代码,但是在“名字”下面有一条红线。。为什么?应该是DirectoryInfo。GetFiles@Tilak:精确到
DirectoryInfo.GetFiles
不是静态的。这意味着您必须创建一个
var di=new DirectoryInfo(wheretolook)在枚举文件之前
di.GetFiles(“*”,SearchOption.AllDirectories)
@Qaesar:看看我的评论,我在使用DirectoryInfo@Tilak时得到了正确的代码,我尝试了第一个代码,但对完整路径无效。我将尝试使用DirectoryInfo one..更新的代码。现在检查,将c:\\test替换为您的顶级目录。当其他人给出一行答案时,答案非常无用
// 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();