Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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#_Arrays_File_Sorting_Directory - Fatal编程技术网

C# 在c上对数组中的文件目录进行排序#

C# 在c上对数组中的文件目录进行排序#,c#,arrays,file,sorting,directory,C#,Arrays,File,Sorting,Directory,我不想对文件目录进行排序。我有很多文件目录。比如: “C:\Users\user\Desktop\programma\destin\ankara\c11.txt” “C:\Users\user\Desktop\programma\destin\ankara\a12.txt” “C:\Users\user\Desktop\programma\destin\ankara\b11.txt” 但它必须按文件名排序。 我该怎么做 Result i want: a12 at top b11 in the m

我不想对文件目录进行排序。我有很多文件目录。比如:
“C:\Users\user\Desktop\programma\destin\ankara\c11.txt”
“C:\Users\user\Desktop\programma\destin\ankara\a12.txt”
“C:\Users\user\Desktop\programma\destin\ankara\b11.txt”

但它必须按文件名排序。 我该怎么做

Result i want:
a12 at top b11 in the middle c11 at last.
这里是代码示例

FolderBrowserDialog fbd = new FolderBrowserDialog();

fbd.ShowDialog();
kaynak = fbd.SelectedPath; 
dnm = Directory.GetFiles(kaynak,ftyp, SearchOption.AllDirectories)
                .Select(Path.GetFileName)
                .ToArray();
dsd = Directory.GetFiles(kaynak, ftyp, SearchOption.AllDirectories);

一种简单的方法是使用带有
Array.Sort
的labmda表达式(请注意,我稍微更改了路径,以显示它与排序无关:

var files = new string[]
{
    @"C:\Users\user\Desktop\programlama\destin\ankara\c11.txt",
    @"C:\Users\user\Desktop\programlama\destin\a12.txt",
    @"C:\Users\user\Desktop\programlama\ankara\b11.txt"
};


Array.Sort(files, (s1, s2) => Path.GetFileName(s1).CompareTo(Path.GetFileName(s2)));
结果:

C:\Users\user\Desktop\programlama\destin\a12.txt
C:\Users\user\Desktop\programlama\ankara\b11.txt
C:\Users\user\Desktop\programlama\destin\ankara\c11.txt

类似于:

filesArray.Select(q=> new { FullPath = q, FileName = Path.GetFileName(q)}).OrderBy(q=> q.FileName).Select(q=>q.FullPath);

也可以使用Linq按路径排序:

var files = new List<string>
{
   @"C:\Users\user\Desktop\programlama\destin\ankara\c11.txt",
   @"C:\Users\user\Desktop\programlama\destin\ankara\a12.txt",
   @"C:\Users\user\Desktop\programlama\destin\ankara\b11.txt"
};

files = files.OrderBy(f => f).ToList();

你是说“排序”很抱歉。排序是正确的。你需要发布你拥有的代码。你可以使用
Array.sort
或Linq的
OrderBy
。你能分享一些代码以便我们确定什么是最合适的吗?这里有一张图片显示了我的文件列表。非常感谢。它解决了我的问题。非常感谢。@maccettura我是这里的新手。我选择绿色tic.正确吗?谢谢..是的,你答对了。我不确定你的代码是否能编译。你可能想修改格式并进行双重检查。@maccettura我现在没有坐在电脑前,我从脑海中键入了解决方案,但如果你导入Sytem.Linq名称空间应该没问题。这也解决了问题。非常感谢。我几乎能编译,只是将
替换为
。但它不会对原始数组进行排序,只返回已排序的IEnumerable(性能较差,因为它必须在数组中迭代3次)。我曾经试着用智能手机回答问题。事实证明,这毕竟不是一部智能手机——像这样做真的很难。我的建议是——不要那样做。阅读问题已经够难了,正确回答问题就更难了,特别是当你必须在回答中包含代码时。这将是:1)保留原始字符串列表未排序,2)返回IEnumerable,3)按整个路径排序。已编辑。我从帖子上看不清楚他是否想改变原来的名单。无论如何,谢谢你的评论:)更好了,但仍然只需要按文件名排序(最初的问题是关于数组,不是列表,但这只是吹毛求疵:-)@ZoharPeled-Ouch!完全误解了这个问题。说得好。我将投票表决你的答案。谢谢你两次!别担心,这会发生在每个人身上。。。我敢打赌,就连Jon Skeet也因为这个原因删除了答案:-)
C:\Users\user\Desktop\programlama\destin\ankara\a12.txt
C:\Users\user\Desktop\programlama\destin\ankara\b11.txt
C:\Users\user\Desktop\programlama\destin\ankara\c11.txt