System.IO.Directory.GetFiles の挙動
はじめに
仕事で Directory.Getfiles を利用した時に、どうやら動きに一貫性がないことが分かった。
Directory.GetFiles(path, “*.xls”); // sample.xls, sample.xlsx どちらも取得できる
こんな感じでコードを書いた時、対象のドライブによって結果が違うのだ。
私のPCでは、
Cドライブ上のディレクトリに対して実行した場合は、コメントどおりに「xlsx」ファイルも取得できた。
しかし、Dドライブ上のディレクトリに対して実行した場合は「xlsx」が取得できない。
なぜだろう。
結局わからなくて teratail で聞いてみた
私が投稿した質問です。
ベストアンサーを読んでいただければ回答が得られます。
簡単にまとめる
そもそも、MSDNにあるように、ワイルドカード+3文字拡張子を指定した場合は、4文字以上の拡張子も取得できるはずです。
https://msdn.microsoft.com/ja-jp/library/wz42302f(v=vs.110).aspx
ただし、ドライブの設定によっては、4文字以上の拡張子が取得できない場合があります。
それが「8.3形式のファイル名」が「無効」である場合です。
8.3形式のファイル名が有効か無効かを調べる
管理者権限で、以下のコマンドラインを実行すれば確認できます。
※最後の「c:」はドライブ名を入れます
fsutil behavior query disable8dot3 c:
「8.3形式」の有効 / 無効を切り替えるにはこちら
fsutil behavior set disable8dot3 c: 0 // Cドライブの設定を有効にする
fsutil behavior set disable8dot3 c: 1 // Cドライブの設定を無効にする
設定が「disable8dot3」なので、0が有効になるんですね。
否定の否定でしっくりこないなー。
さいごに
つまり、何が言いたいかというと、teratail すごいってことね。
stackoverflow もいいけど、困ったらとりあえず teratail で聞いてみましょうって思う。
もちろん、ちゃんと質問できるレベルまでは自分で調べるけどね。
レッツteratail !!
今日はここまで