分享

C# 对目录中的文件名按照数字序号进行排序

 行走在理想边缘 2020-11-20

一个目录中有如下所示的文件

  

在读取该目录的文件后,文件名将按照 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、排序结果如下图所示

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多