0

我有一个程序,net471Directory.GetFiles.

现在我们要将其转换为.NET Core并在Linux上运行。
当我们这样做时,我们会得到不同的文件顺序。

我知道文档是怎么说的:

不保证返回文件名的顺序

但在我们迁移到 Linux 之前,文件的顺序是固定的。

我们想保持这个顺序,我们需要自己写一个比较器,还是已经存在一个?

规则:

  • 后划线:file.txt -> file_en.txt.
  • 无后带数字的名称file.txt -> file1.txt
  • 下划线前的数字file1.txt -> file_en.txt
  • 字母数字10.txt -> 3.txt
  • 忽略大小写AA.txt -> ab.txt -> ZZ.txt

如果有一个比较器,我们需要它与操作系统无关。

4

2 回答 2

4

.net 框架中也不能保证文件的顺序(来自 .net 框架文档https://docs.microsoft.com/en-us/dotnet/api/system.io.directory.getfiles?view=netframework-4.7 .1 ):

返回文件名的顺序不保证;如果需要特定的排序顺序,请使用 Sort 方法。

您的应用程序的行为应该不会比现在好或差。正如文档建议的那样,您可以使用Sort来保证文件的顺序。Sort需要一个实现,IComparer因此如果您确实需要确保按此顺序返回事物,则可以实现上述规则。

于 2019-11-25T09:14:17.317 回答
2

根据How to compare strings in C#(和Try.NET),您需要使用OrdinalIgnoreCase这些规则来获取这些规则。

例如:

var files = Directory.GetFiles(folderName);
Array.Sort(files, StringComparer.OrdinalIgnoreCase);
于 2019-11-25T09:31:33.803 回答