DirectInfo.GetFiles returns an example of the default sort of an array

  • 2020-06-01 10:51:39
  • OfStack


using System;
using System.Collections;
using System.IO;
namespace ConsoleApplication1
{
    /// <summary>
    ///  File sort class 
    /// </summary>
    public class FileSort : IComparer
    {
        private FileOrder _fileorder;
        private FileAsc _fileasc;
        /// <summary>
        ///  The constructor 
        /// </summary>
        public FileSort()
            : this(FileOrder.Name, FileAsc.Asc)
        { }
        /// <summary>
        ///  The constructor 
        /// </summary>
        /// <param name="fileorder"></param>
        public FileSort(FileOrder fileorder)
            : this(fileorder, FileAsc.Asc)
        { }
        /// <summary>
        ///  The constructor 
        /// </summary>
        /// <param name="fileorder"></param>
        /// <param name="fileasc"></param>
        public FileSort(FileOrder fileorder, FileAsc fileasc)
        {
            _fileorder = fileorder;
            _fileasc = fileasc;
        }
        /// <summary>
        ///  The comparison function 
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public int Compare(object x, object y)
        {
            FileInfo file1 = x as FileInfo;
            FileInfo file2 = y as FileInfo;
            FileInfo file3;
            if (file1 == null || file2 == null)
                throw new ArgumentException(" Parameter is not FileInfo The class instance .");
            if (_fileasc == FileAsc.Desc)
            {
                file3 = file1;
                file1 = file2;
                file2 = file3;
            }
            switch (_fileorder)
            {
                case FileOrder.Name:
                    return file1.Name.CompareTo(file2.Name);
                case FileOrder.Length:
                    return file1.Length.CompareTo(file2.Length);
                case FileOrder.Extension:
                    return file1.Extension.CompareTo(file2.Extension);
                case FileOrder.CreationTime:
                    return file1.CreationTime.CompareTo(file2.CreationTime);
                case FileOrder.LastAccessTime:
                    return file1.LastAccessTime.CompareTo(file2.LastAccessTime);
                case FileOrder.LastWriteTime:
                    return file1.LastWriteTime.CompareTo(file2.LastWriteTime);
                default:
                    return 0;
            }
        }
    }
    /// <summary>
    ///  Sorting based on 
    /// </summary>
    public enum FileOrder
    {
        /// <summary>
        ///  The file name 
        /// </summary>
        Name,
        /// <summary>
        ///  The size of the 
        /// </summary>
        Length,
        /// <summary>
        ///  type 
        /// </summary>
        Extension,
        /// <summary>
        ///  Creation time 
        /// </summary>
        CreationTime,
        /// <summary>
        ///  Access time 
        /// </summary>
        LastAccessTime,
        /// <summary>
        ///  Modify the time 
        /// </summary>
        LastWriteTime
    }
    /// <summary>
    ///  Ascending and descending order 
    /// </summary>
    public enum FileAsc
    {
        /// <summary>
        ///  ascending 
        /// </summary>
        Asc,
        /// <summary>
        ///  Descending order 
        /// </summary>
        Desc
    }
}


Related articles: