我有一个用net471
编写并使用Directory.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
如果有一个比较器,我们需要它与操作系统无关。
答案 0 :(得分:4)
在.net框架中也不保证文件的顺序(来自.net框架文档https://docs.microsoft.com/en-us/dotnet/api/system.io.directory.getfiles?view=netframework-4.7.1):
不能保证返回文件名的顺序;如果需要特定的排序顺序,请使用Sort方法。
您的应用程序的行为应该不会比现在好或坏。正如文档所建议的,您可以使用Sort
来保证文件的顺序。 Sort
采用IComparer
的实现,因此如果确实需要确保按此顺序返回事物,则可以实现上述规则。
答案 1 :(得分:2)
根据How to compare strings in C#(和 Try.NET ),您需要使用OrdinalIgnoreCase
来获得这些规则。
例如:
var files = Directory.GetFiles(folderName);
Array.Sort(files, StringComparer.OrdinalIgnoreCase);