【问题标题】:Sort files directory in array on c# [duplicate]在C#上对数组中的文件目录进行排序[重复]
【发布时间】:2018-04-09 21:01:27
【问题描述】:

我不想对文件目录进行排序。我有很多文件方向。喜欢: "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"

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

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 或Linq 的OrderBy。您能否分享一些代码,以便我们确定最合适的代码?
  • 这里有一张图片显示我的文件列表。 i.stack.imgur.com/q1AtE.png

标签: c# arrays file sorting directory


【解决方案1】:

一种简单的方法是使用带有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

You can see a live demo on rextester.

【讨论】:

  • 非常感谢。它解决了我的问题。非常感谢。
  • @maccettura 我是这里的新手。我检查绿色的tic。正确吗?谢谢..
  • 是的,你没看错
【解决方案2】:

或者你可以使用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();

结果

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

【讨论】:

  • 这将:1) 保留未排序的原始字符串列表,2) 返回一个 IEnumerable,3) 按整个路径排序。
  • 已编辑。如果他想更改原始列表,我从帖子中没有发现。无论如何,感谢您的评论:)
  • 更好,但仍需要仅按文件名排序(最初的问题是关于数组,而不是列表,但这只是吹毛求疵 :-))
  • @ZoharPeled 哎哟!完全误读了这个问题。好点子。我会给你的答案一个赞成票。再次感谢!
  • 别担心,每个人都会遇到这种情况......我敢打赌,即使是 Jon Skeet 也会因为这个原因删除答案:-)
【解决方案3】:

类似:

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

【讨论】:

  • 我不确定您的代码是否可以编译。您可能需要修复格式并仔细检查。
  • @maccettura 我现在没有坐在我的电脑前,我从脑海中输入了解决方案,但是如果你导入 Sytem.Linq 命名空间应该没问题。
  • 它也解决了问题。非常感谢。
  • 我几乎可以编译了,只需将; 替换为,。但它不会对原始数组进行排序,只返回一个排序后的 IEnumerable(并且性能很差,因为它必须遍历数组 3 次)。
  • 我曾经尝试用智能手机回答问题。事实证明毕竟不是这样的智能手机 - 像这样正确地做到这一点真的很难。我的建议 - 不要那样做。阅读问题已经够难了,正确回答更难,尤其是当您必须在答案中包含代码时。
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 2016-01-14
  • 2021-12-03
  • 2015-04-15
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多