You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Listbox加载指定目录Excel文件时如何按大小排序?排序条件加在何处?

按文件大小排序的最佳位置:LINQ查询阶段

当然是把排序逻辑加在LINQ查询语句里啦!这样不仅代码更简洁,逻辑也更集中,而且性能上也更高效——毕竟在生成最终文件数组前就完成排序,不用额外再处理一遍数据。

你可以直接在现有Where过滤之后,追加OrderBy(升序,小文件在前)或者OrderByDescending(降序,大文件在前)方法,用FileInfo.Length来获取文件大小作为排序依据。

不过这里有个小优化:尽量不要重复创建FileInfo对象(比如你原来的代码里Where和排序里各创建一次),可以先用Select把每个路径转成FileInfo,再统一过滤和排序,这样每个文件只生成一次FileInfo,效率更高。修改后的代码如下:

var files = Directory.GetFiles(FBD.SelectedPath, "*.xls")
    .Select(file => new FileInfo(file)) // 先转成FileInfo对象
    .Where(info => 
        info.CreationTime.Date >= DateTime.Today.Date 
        && info.Name.Contains("AA")) // 用FileInfo的Name属性判断更准确
    .OrderBy(info => info.Length) // 按文件大小升序排列,想要降序就用OrderByDescending
    .Select(info => info.FullName) // 再转回到文件路径字符串
    .ToArray();

string[] dirs = Directory.GetDirectories(FBD.SelectedPath); 
foreach (string file in files) { 
    listBox1.Items.Add(Path.GetFileName(file));
}

如果非要在foreach循环前处理的话,也可以先对files数组排序,比如用Array.Sort:

string[] files = Directory.GetFiles(FBD.SelectedPath, "*.xls") 
    .Where(file => new FileInfo(file).CreationTime.Date >= DateTime.Today.Date && file.Contains("AA")) 
    .ToArray(); 

// 在foreach前排序
Array.Sort(files, (fileA, fileB) => 
    new FileInfo(fileA).Length.CompareTo(new FileInfo(fileB).Length));

string[] dirs = Directory.GetDirectories(FBD.SelectedPath); 
foreach (string file in files) { 
    listBox1.Items.Add(Path.GetFileName(file));
}

但这种写法不如LINQ链式调用优雅,而且还是会重复创建FileInfo,所以更推荐第一种方式。

内容的提问来源于stack exchange,提问作者user2839067

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:48:45