最近在进行数据迁移的时候发现,通过DirectoryInfo的GetFiles()方法获取到指定目录下的所有文件后,文件的排序与自己想要的排序不符。因而写了自定义的排序方式。
未修改时,直接获取到的文件排序如图所示:
12的文件此时排在了101文件的后面,而我想要的是按数字进行排序。
自定义方法代码如下:
//文件名排序
public FileInfo[] FileSort(FileInfo[] files)
{
FileInfo temp;
for (int i = 0; i < files.Length - 1; i++)
{
for (int j = 0; j < files.Length - 1 - i; j++)
{
if (CustomSort(files[j].Name, files[j + 1].Name))
{
temp = files[j];
files[j] = files[j + 1];
files[j + 1] = temp;
}
}
}
return files;
}
public bool CustomSort(string str1, string str2)
{
int result1 = Convert.ToInt32(System.Text.RegularExpressions.Regex.Replace(str1, @"[^0-9]+", ""));
int result2 = Convert.ToInt32(System.Text.RegularExpressions.Regex.Replace(str2, @"[^0-9]+", ""));
if (result1 > result2)
return true;
else
return false;
}
调用方式如下:
DirectoryInfo Dir = new DirectoryInfo(filename);
FileInfo[] files = Dir.GetFiles();
FileInfo[] filesNew = new FileNameSort().FileSort(files);//FileNameSort为新建的类名
最终实现效果如图所示: