9678

[code]

    dirNow = "C:\car";
    fileNames[0] = "C:\car\1.txt";
    fileNames[1] = "C:\car\2.txt";
    fileNames[2] = "C:\car\3.txt";
    fileNames[3] = "C:\car\10.txt";
    
    
    string[] fileNames = Directory.GetFiles(dirNow);
    Array.Sort(fileNames);
    foreach(string str in fileNames) Console.WriteLine(str);
    Application.Exit();
    
[/code]

結果

[code]

    1.txt
    10.txt
    2.txt
    3.txt
    
[/code]

理想

[code]

    1.txt
    2.txt
    3.txt
    10.txt
    
[/code]


CC BY-SA 3.0
2015-04-30T02:07:34.780
9676
2017-06-19T05:10:36.137
2017-06-19T05:10:36.137
5793
7973
question
c#
Directory.getFilesで数値順でのソートができません。


ファイル名は必ず数字だという前提ならば以下の様に書けます。

[code]

    using System;
    using System.IO;
    using System.Linq;
    
    class Program
    {
        static void Main()
        {
            var fileNames = new string[] {
                @"C:\car\1.txt",
                @"C:\car\2.txt",
                @"C:\car\3.txt",
                @"C:\car\10.txt"
            };
            //var dirNow = @"C:\car";
            //string[] fileNames = Directory.GetFiles(dirNow);
    
            fileNames = fileNames.OrderBy(n => {
                int v = 0;
                if (int.TryParse(Path.GetFileNameWithoutExtension(n), out v)) {
                    return v;
                }
                return 9999999; // 数字で無いファイル名は一番後ろになる様に
            }).ToArray();
    
            foreach(string str in fileNames) {
                Console.WriteLine(str);
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2015-04-30T02:29:17.250
9677
2015-04-30T02:29:17.250
440
9676
answer


WindowsであればStrCmpLogicalWを比較関数として使えば理想のソートが実現できます。

StrCmpLogicalW function (Windows)  
<https://msdn.microsoft.com/ja-
jp/library/windows/desktop/bb759947(v=vs.85).aspx>


CC BY-SA 3.0
2015-04-30T02:40:41.047
9678
2015-04-30T02:40:41.047
9545
9676
answer