c#用GetFiles()获得的文件列表,如何排序才能与在本机文件夹上按名称排的完全一致?

黄大仙儿 2014-06-03 10:14:24
借用下别人的图

foreach里遍历顺序列出来


只能自己写算法吗?
...全文
1633 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35549241 2016-07-22
  • 打赏
  • 举报
回复
引用 3 楼 akuma8848 的回复:
http://bbs.csdn.net/topics/350096947 fileList= fileList.OrderBy(s =>int.Parse( Regex.Match(s, @"\d+").Value)).ToArray();
这个方法可行,我测试过了
preBS 2015-07-04
  • 打赏
  • 举报
回复
引用 20 楼 wg5945 的回复:
Array.Sort(fileEntries, (x1, x2) => int.Parse(Regex.Match(x1.Name, @"\d+").Value).CompareTo(int.Parse(Regex.Match(x2.Name, @"\d+").Value)));
我调试错误 3 无法将 lambda 表达式 转换为类型“System.Array”,原因是它不是委托类型 错误 4 当前上下文中不存在名称“Regex”
fordawn 2015-06-03
  • 打赏
  • 举报
回复
用EnumerateDirectories()的话,怎么排序呢
ace111qq 2015-02-13
  • 打赏
  • 举报
回复
[System.Runtime.InteropServices.DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
list.Add("10");
list.Sort(StrCmpLogicalW);
黄大仙儿 2014-06-09
  • 打赏
  • 举报
回复
引用 27 楼 tinydyw 的回复:
我提供一种思路...楼主主要是根据命名里的数字部分排序..那么可以拿一个类似dic<obj,obj>的容器去装这些需要排序的内容..将命名里的数字取出放到key的位置..整体名字放在value...然后对数值部分进行排序..然后根据排序得到的list或者数组依次从dic里取值拿到最终的排序..... 不过我总觉得有些复杂化了...望各位高手改进...
思路和9楼是一样的 我目前用的是20楼的方法
tinydyw 2014-06-05
  • 打赏
  • 举报
回复
我提供一种思路...楼主主要是根据命名里的数字部分排序..那么可以拿一个类似dic<obj,obj>的容器去装这些需要排序的内容..将命名里的数字取出放到key的位置..整体名字放在value...然后对数值部分进行排序..然后根据排序得到的list或者数组依次从dic里取值拿到最终的排序..... 不过我总觉得有些复杂化了...望各位高手改进...
tinydyw 2014-06-03
  • 打赏
  • 举报
回复
数组也有.toList()方法吧...list是有.sort()方法的...为何一定要用linq...
黄大仙儿 2014-06-03
  • 打赏
  • 举报
回复
引用 20 楼 wg5945 的回复:
Array.Sort(fileEntries, (x1, x2) => int.Parse(Regex.Match(x1.Name, @"\d+").Value).CompareTo(int.Parse(Regex.Match(x2.Name, @"\d+").Value)));
谢谢 话说这个东西是linq语句吗?
黑子大哥 2014-06-03
  • 打赏
  • 举报
回复
又或者,你在存储图片的时候就这样 01.jpg 02.jpg 不超过99,文件排序就是正确的
黑子大哥 2014-06-03
  • 打赏
  • 举报
回复
linq 自定义排序实现!!
wg5945 2014-06-03
  • 打赏
  • 举报
回复
Array.Sort(fileEntries, (x1, x2) => int.Parse(Regex.Match(x1.Name, @"\d+").Value).CompareTo(int.Parse(Regex.Match(x2.Name, @"\d+").Value)));
黄大仙儿 2014-06-03
  • 打赏
  • 举报
回复
引用 18 楼 huang369509940 的回复:
[quote=引用 16 楼 wg5945 的回复:]
Array.Sort(fileEntries, (x1, x2) => x1.Name.PadLeft(10, '0').CompareTo(x2.Name.PadLeft(10, '0')));

厉害 为什么加上PadLeft就OK了?
果然有时间还是应该好好学习一下linq[/quote]
额 不对。。这个还是有问题


对于这种的OK
黄大仙儿 2014-06-03
  • 打赏
  • 举报
回复
引用 16 楼 wg5945 的回复:
Array.Sort(fileEntries, (x1, x2) => x1.Name.PadLeft(10, '0').CompareTo(x2.Name.PadLeft(10, '0')));
厉害 为什么加上PadLeft就OK了? 果然有时间还是应该好好学习一下linq
mwp 2014-06-03
  • 打赏
  • 举报
回复
自己排一下序吧
wg5945 2014-06-03
  • 打赏
  • 举报
回复
Array.Sort(fileEntries, (x1, x2) => x1.Name.PadLeft(10, '0').CompareTo(x2.Name.PadLeft(10, '0')));
黄大仙儿 2014-06-03
  • 打赏
  • 举报
回复
引用 14 楼 wg5945 的回复:
Array.Sort(fileEntries, (x1, x2) => x1.Name.CompareTo(x2.Name));
这个不管用额。。
wg5945 2014-06-03
  • 打赏
  • 举报
回复
Array.Sort(fileEntries, (x1, x2) => x1.Name.CompareTo(x2.Name));
黄大仙儿 2014-06-03
  • 打赏
  • 举报
回复
引用 3 楼 akuma8848 的回复:
http://bbs.csdn.net/topics/350096947 fileList= fileList.OrderBy(s =>int.Parse( Regex.Match(s, @"\d+").Value)).ToArray();
我不光是要名字的 能不能对FileInfo的数组根据名字排序?
Pandorym 2014-06-03
  • 打赏
  • 举报
回复
唔,似乎实现IComparer接口也可以。
黄大仙儿 2014-06-03
  • 打赏
  • 举报
回复
引用 10 楼 hbu_pig 的回复:
List有Sort吧。。。或者Orderby之类的。我觉得3l的已经解决了你的问题
因为还要FileInfo里的其他信息 这些都是排序字符串的 如果没有根据文件名直接排序FileInfo数组的方法的话 只能按9楼的做了吧。。
加载更多回复(12)

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧