本文共 1637 字,大约阅读时间需要 5 分钟。
一个目录中有如下所示的文件
在读取该目录的文件后,文件名将按照 0、1、11、12、13、14、..........的顺序来进行排列,而不是上图中的顺序进行排列,此时可以通过调用Windows的 Shlwapi.dll 来对读取后的文件进行排序。
1、先创建一个继承自 IComparer 的类,可以将该类的访问属性设置为 public (若设置为私有,则只能在该工程中被使用)
using System;using System.Collections;using System.Runtime.InteropServices; // 必须含有该引用using System.Text;namespace SortByFileName{ public class FileNameSort:IComparer { //调用windos 的 DLL [System.Runtime.InteropServices.DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)] private static extern int StrCmpLogicalW(string param1, string param2); //前后文件名进行比较。 public int Compare(object name1, object name2) { if (null == name1 && null == name2) { return 0; } if (null == name1) { return -1; } if (null == name2) { return 1; } return StrCmpLogicalW(name1.ToString(), name2.ToString()); } }}
2、在其它的类中调用该类,对文件名进行排序
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;namespace SortByFileName{ class Program { static void Main(string[] args) { string path = @"E:\Data\Test"; DirectoryInfo directoryInfo = new DirectoryInfo(path); FileInfo[] files = directoryInfo.GetFiles("*.txt"); Array.Sort(files, new FileNameSort()); // 对获取的文件名进行排序 foreach (var theFile in files) { Console.WriteLine(theFile); } Console.ReadKey(); } }}
3、排序结果如下图所示
转载地址:http://ksegf.baihongyu.com/