首页 新闻 会员 周边 捐助

wpf DirectoryInfo GetFiles() 文件顺序

0
悬赏园豆:30 [已解决问题] 解决于 2012-08-23 14:43

我用WPF DirectoryInfo.GetFiles() 获取到的文件顺序不对,比如 第一个是 1.jpg 第二个不是2.jpg 而是10.jpg 哪外高手可以帮忙解决下

问题补充:

或着 怎么能找出来 放进这个文件夹的最后一个文件 创建时间不一定是最后

丶Silence的主页 丶Silence | 初学一级 | 园豆:56
提问于:2012-08-23 11:12
< >
分享
最佳答案
0

你把获取到的文件自己在内存中根据文件名进行默认排序就可以了。

var files = directory.GetFiles().OrderBy(f => f.Name).ToArray();
收获园豆:10
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-08-23 11:20

试了下,顺序没有变。

丶Silence | 园豆:56 (初学一级) | 2012-08-23 11:29

@小学徒:  你说“第一个是 1.jpg 第二个不是2.jpg 而是10.jpg”,这个是你希望的还是不希望的啊。。。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-08-23 12:33

@水牛刀刀: 如果你确保文件名都是“数字.jpg”的话,可以这样:

var files = directory.GetFiles().OrderBy(f => 
int.Parse(f.Name.Substring(0, f.Name.IndexOf('.')))).ToArray();
水牛刀刀 | 园豆:6350 (大侠五级) | 2012-08-23 12:37
其他回答(4)
0

就是应该获取10.jpg因为他是一个一个对的,文件名第一个都是1的当然比第一个是2的靠前。。。改成一,二,这样吧

羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-23 11:28

什么意思??啥叫最后一个??

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-23 11:33

@王凌志: 就是现在文件中里面两个文件 1 和 2  我现在又放进去一个文件3 ,我现在要拿到3这个文件

支持(0) 反对(0) 丶Silence | 园豆:56 (初学一级) | 2012-08-23 11:38

@小学徒: 是什么情况??是上传??上传的时候没有用到数据库??

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-23 11:41

@王凌志: 跟数据库没有关系 文件操作

支持(0) 反对(0) 丶Silence | 园豆:56 (初学一级) | 2012-08-23 11:43

@小学徒: http://www.cnblogs.com/0771bc/archive/2012/08/18/2645719.html你看看这个吧,我真不明白你要干啥。。。。

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-23 11:47
0

把文件名转换为整形后排序。

收获园豆:5
Launcher | 园豆:45050 (高人七级) | 2012-08-23 11:32

文件夹里面的文件名不一定全是数字,我的目的是找到最后一个放进文件夹的文件,不过还是谢谢了

支持(0) 反对(0) 丶Silence | 园豆:56 (初学一级) | 2012-08-23 11:35

@小学徒: 查看文件的修改时间:File.GetLastWriteTime

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2012-08-23 11:43
0

OrderBy有一个带IComparer的重载的,可以实现一个IComparer实现你的需求.

收获园豆:5
zhangweiwen | 园豆:904 (小虾三级) | 2012-08-23 13:45
0

默认按照名称来排序了,而且名称还是字符串的排序方式,对于字符串来说10 肯定是在2的前面。

List<string> list1 = new List<string> { "1.jpg","2.jpg","10.jpg"};

            Console.WriteLine("-------------------");

            list1.Sort();

            Console.WriteLine(string.Join(" ", list1));

            Console.WriteLine("-------------------");

            list1.Sort((o1, o2) => {
                return Convert.ToInt32(o1.Split('.')[0]) - Convert.ToInt32(o2.Split('.')[0]);
            });

            Console.WriteLine(string.Join(" ", list1));

输出的结果为:

-------------------
1.jpg 10.jpg 2.jpg
-------------------
1.jpg 2.jpg 10.jpg
-------------------

收获园豆:10
chenping2008 | 园豆:9836 (大侠五级) | 2012-08-23 14:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册