Explorer におけるファイル名ソートの歴史

どうしたら並び替えの方式を変えられるかという記事は多いけれど、なぜそのようになっているのかを知ることは難しい。
そういうことは大抵 Raymond Chen 先生が知っている

Windows 95

lstrcmpi を基にしたもの。

"file20" と "file139" というファイルがあった場合、"file139"、"file20" の順になった。
これはプログラマ視点では完全にロジカルだが、あまり人間的とは言えないものだった。

Windows XP

もっと「人間らしく」並ぶようにした。
つまり数字が並んだファイル名があった場合、これを数値として並ぶようにした(number-based sorting)。

だがファイル名を16進で付けいていた場合、厄介なことになった。
つまり "103F2"、"1040"、"1040A" の順に並んでしまう。
これはポリシーを変更することで以前のソート(character-by-character)に変えて解決できる。

Vista 以降:

XP の並び順にさらに工夫を加え、ドットについての取り扱いを変えた結果、"File 1.txt" と "File.txt" は "File.txt"、"File 1.txt" の順に並ぶことになったようだ。つまり " "(空白) と "."(ドット) ではドットの方が前とみなされる。

(なおこの挙動は Windows 7 で試すと再現せず、"File 1.txt"、"File.txt" の並びになった。Vista のみの並び順だったのかもしれない)

また "1.5" と "1.25" の場合、"1.5"、"1.25" と並ぶ。これはドットが小数点ではなく、数字のセパレータとして捉えられているからだ。このファイル名が第 1 章 5 節、第 1 章 25 節のような意味なら正しい並び替えと言えるが、1.5cm と 1.25cm なら逆だとも言える。Explorer はコンテキストを理解できないので、一律のルールで並び替える。
これもポリシーによって以前の並び替えにできる。

また「種類」列をクリックした場合、以前の Windows は並び順を保ったまま種類のみが入れ替わった。しかし Windows 7 では種類をクリックすると名前も合わせてソートの昇降が変わる。

参考: