【问题标题】:How to correctly order files based on the filename [duplicate]如何根据文件名正确排序文件[重复]
【发布时间】:2013-07-01 20:20:46
【问题描述】:

我使用这个功能:

files = Directory.GetFiles(tbDirectory.Text).ToArray();

我的文件按此顺序保存:

Text.txt
Text_10.txt
Text_2.txt
...
Text_9.txt

我希望它们像 windows 一样排序:

Text.txt
Text_2.txt
...
Text_9.txt
Text_10.txt

我该怎么做?

【问题讨论】:

标签: c# winforms


【解决方案1】:

如果你想和windows一样对它们进行排序,可以使用这个函数进行比较:

[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);

然后您可以定义将使用此函数的IComparer<string> 的实现。

【讨论】:

  • 你能告诉我在哪里添加这段代码吗?
  • 通常 P/Invoke 函数是在内部静态类中定义的。至于调用它,最好的方法是定义自己的IComparer<string>
【解决方案2】:

根据 Andrey Shchekin 的回答,您只需要制作这样的课程:

internal class FileNameComparer : IComparer<string>
{
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
    public static extern int StrCmpLogicalW(string psz1, string psz2);

    public int Compare(string a, string b)
    {
        return StrCmpLogicalW(a, b);
    }
}

然后使用这个比较器:

files = Directory.GetFiles(tbDirectory.Text).OrderBy(file => file, new FileNameComparer()).ToArray();

【讨论】:

  • 以上所有重复的答案都对C#初学者没有帮助,我的代码对每个人来说都是清晰而简单的。
  • 您选择使用自己的答案只是因为它是适合您的复制/粘贴解决方案。上面的答案是相同的,没有提供不需要的信息。您只回答了 2 个问题,都是您自己的问题,而且都不值得回答。
猜你喜欢
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
相关资源
最近更新 更多