c# - 按名称对 FileSystemInfo[] 排序

标签 c# .net sorting filesysteminfo

我可能已经花了大约 500 个小时在谷歌上搜索并阅读 MSDN 文档,但它仍然无法按照我想要的方式工作。

我可以像这样按文件名排序:

01.png
02.png
03.png
04.png

即所有相同的文件长度。

第二个是一个文件长度更长的文件,一切都会变糟。

例如在序列中:

1.png
2.png
3.png
4.png
5.png
10.png
11.png

内容如下:

1.png, 2.png then 10.png, 11.png

我不想要这个

我的代码:

DirectoryInfo di = new DirectoryInfo(directoryLoc);
FileSystemInfo[] files = di.GetFileSystemInfos("*." + fileExtension);
Array.Sort<FileSystemInfo>(files, new Comparison<FileSystemInfo>(compareFiles));

foreach (FileInfo fri in files)
{
    fri.MoveTo(directoryLoc + "\\" + prefix + "{" + operationNumber.ToString() + "}" + (i - 1).ToString("D10") +
        "." + fileExtension);

    i--;
    x++;
    progressPB.Value = (x / fileCount) * 100;
}

// compare by file name
int compareFiles(FileSystemInfo a, FileSystemInfo b)
{
    // return a.LastWriteTime.CompareTo(b.LastWriteTime);
    return a.Name.CompareTo(b.Name);
}

最佳答案

这不是文件长度的问题,而是按字典顺序比较名称的问题。

在这种特殊情况下,您似乎想要获取不带扩展名的名称,尝试将其解析为整数,然后以这种方式比较两个名称 - 如果失败,您可以回退到字典顺序。

当然,如果您有“debug1.png,debug2.png,...debug10.png”,那将不起作用...在这种情况下您需要更复杂的算法。

关于c# - 按名称对 FileSystemInfo[] 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9682573/

相关文章:

c++ - 查找计数排序的起始索引

jQuery UI 可对巨型列表进行排序并保存在数据库中

c# - 表单在 backgroundworker 中不显示为对话框?

c# - 无法更新 EntitySet 'ItemRankList' 因为它有一个 DefiningQuery 并且不存在 <UpdateFunction> 元素

c# - 中文 TTS 失败,而英语有效

c# - WPF ListView 虚拟化。如何禁用 ListView 虚拟化?

Javascript/jQuery 组和排序组

c# - 着眼于 future 的代码

.net - 绑定(bind)配置和行为有什么区别?

c# - NAudio使用WaveMixerStream32()将2个两个音频混合在一起->如何让第二个音频稍后开始