首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按名称对FileSystemInfo[]排序

按名称对FileSystemInfo[]排序
EN

Stack Overflow用户
提问于 2012-03-13 18:49:39
回答 5查看 1.6K关注 0票数 2

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

我可以按名称对文件排序,如下所示:

代码语言:javascript
复制
01.png
02.png
03.png
04.png

即所有相同的文件长度。

第二个是文件长度更长的文件,所有的东西都下地狱了。

例如,在序列中:

代码语言:javascript
复制
1.png
2.png
3.png
4.png
5.png
10.png
11.png

它写道:

代码语言:javascript
复制
1.png, 2.png then 10.png, 11.png

我不想这样。

我的代码:

代码语言:javascript
复制
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);
}
EN

回答 5

Stack Overflow用户

发布于 2012-03-13 18:55:10

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

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

当然,如果你有"debug1.png,debug2.png,...debug10.png“,这是行不通的……在这种情况下,你需要一个更复杂的算法。

票数 3
EN

Stack Overflow用户

发布于 2012-03-13 18:58:34

您将名称作为字符串进行比较,即使(我假设)您希望它们按数字排序。

这是一个众所周知的问题,其中" 10“在" 9”之前,因为10 (1)中的第一个字符小于9中的第一个字符。

如果您知道文件都将由编号的名称组成,则可以修改自定义排序例程以将名称转换为整数并对其进行适当的排序。

票数 3
EN

Stack Overflow用户

发布于 2012-03-13 18:56:57

您的代码是正确的,并且工作正常,只是排序是按字母顺序执行的,而不是按数字顺序执行。

例如,字符串"1“、"10”、"2“按字母顺序排列。相反,如果你知道你的文件名总是一个数字加".png“,你可以按数字排序。例如,如下所示:

代码语言:javascript
复制
int compareFiles(FileSystemInfo a, FileSystemInfo b)         
{             
    // Given an input 10.png, parses the filename as integer to return 10
    int first = int.Parse(Path.GetFileNameWithoutExtension(a.Name));
    int second = int.Parse(Path.GetFileNameWithoutExtension(b.Name));

    // Performs the comparison on the integer part of the filename
    return first.CompareTo(second);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9682573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档