我用WPF DirectoryInfo.GetFiles() 获取到的文件顺序不对,比如 第一个是 1.jpg 第二个不是2.jpg 而是10.jpg 哪外高手可以帮忙解决下
或着 怎么能找出来 放进这个文件夹的最后一个文件 创建时间不一定是最后
你把获取到的文件自己在内存中根据文件名进行默认排序就可以了。
var files = directory.GetFiles().OrderBy(f => f.Name).ToArray();
试了下,顺序没有变。
@小学徒: 你说“第一个是 1.jpg 第二个不是2.jpg 而是10.jpg”,这个是你希望的还是不希望的啊。。。
@水牛刀刀: 如果你确保文件名都是“数字.jpg”的话,可以这样:
var files = directory.GetFiles().OrderBy(f =>
int.Parse(f.Name.Substring(0, f.Name.IndexOf('.')))).ToArray();
就是应该获取10.jpg因为他是一个一个对的,文件名第一个都是1的当然比第一个是2的靠前。。。改成一,二,这样吧
什么意思??啥叫最后一个??
@王凌志: 就是现在文件中里面两个文件 1 和 2 我现在又放进去一个文件3 ,我现在要拿到3这个文件
@小学徒: 是什么情况??是上传??上传的时候没有用到数据库??
@王凌志: 跟数据库没有关系 文件操作
@小学徒: http://www.cnblogs.com/0771bc/archive/2012/08/18/2645719.html你看看这个吧,我真不明白你要干啥。。。。
把文件名转换为整形后排序。
文件夹里面的文件名不一定全是数字,我的目的是找到最后一个放进文件夹的文件,不过还是谢谢了
@小学徒: 查看文件的修改时间:File.GetLastWriteTime
OrderBy有一个带IComparer的重载的,可以实现一个IComparer实现你的需求.
默认按照名称来排序了,而且名称还是字符串的排序方式,对于字符串来说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
-------------------