System.IO.Directory.GetFilesでフィルタに"*.htm"を指定した場合、拡張子がhtmlのものも検索される

解決


ペペロンチーノ  2009-02-04 00:01:05  No: 145743

こんにちは。
以下のように、指定したフォルダ内(サブフォルダ含む)にある、拡張子が".htm"であるファイルのパス一覧を取得するために、
aryFiles = System.IO.Directory.GetFiles(指定したフォルダのパス, "*.htm", IO.SearchOption.AllDirectories)
のようにしているのですが、どうやらこのときに"*.html"のファイルまで抽出しているようです。
どうして".html"のファイルまで抽出されるのでしょうか?
また、".htm"のファイルだけ抽出するにはどうすればよいでしょうか?
VBのバージョンは2008 Expressです。
よろしくお願いします。


魔界の仮面弁士  2009-02-04 00:46:02  No: 145744

> どうして".html"のファイルまで抽出されるのでしょうか?
ショートファイル名の拡張子が、.HTM だからです。
そのため、.HTML まで列挙されるのは誤りでは無く、正しい動作です。

たとえば、その HTML ファイルが「C:\SampleFile.html」だとします。
これはロングファイル名と呼ばれるものですが、それに対応した
ショートファイル名(8+3名)という物が存在し、これは例えば
「C:\SAMPLE~1.HTM」という名前になっているのです。

ショートファイル名は、以下のようにして確認できます。

(1) [Win]+[R]キーを押して、『ファイル名を指定して実行』を開く。
(2) 「cmd」と入力して Enter。黒画面が表示される。
(3) 「Dir "C:\SampleFile.html" /X」と入力して Enter。
(4) 短いファイル名「SAMPLE~1.HTM」が表示される。

> また、".htm"のファイルだけ抽出するにはどうすればよいでしょうか?
抽出後、末尾が ".htm" であるかどうかを追加検証すれば良いかと。


ペペロンチーノ  2009-02-04 05:39:12  No: 145745

魔界の仮面弁士さん、ありがとうございました。よく分かりました。
抽出できたファイル名の拡張子を、System.IO.Path.GetExtensionで調べ、
一致するかどうかを判断するようにします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加