プロが教える店舗&オフィスのセキュリティ対策術

(VB.NET)
Dim files As String() = System.IO.Directory.GetFiles("C:\aaa", "*", System.IO.SearchOption.AllDirectories)
ListBox1.Items.AddRange(files)

上記のコードでは"C:\aaa"以下のすべてのファイルを取得しますが、
例えばGetFilesメソッドの2番目のパラメータに
"*.(html|htm)"などと指定して(この場合は無理でしたが)"C:\aaa"以下の拡張子が「html」または「htm」のファイルを取得するにはどうすればよいでしょうか。
"*.html"のように1種類の場合はできるのですが…。

A 回答 (3件)

GetFilesで取得した配列を独自に処理してやればいいのでは



for each ss as string in files
  dim fi as new IO.FileInfo(ss)
  dim ext as String = fi.Extention.ToLower
  ' このextとの比較を工夫すれば別の種類のファイルでも対処可能
  if ext = ".html" or ext = ".htm" then
    ListBox1.Items.add( ss )
  end if
next

といった具合で ...
    • good
    • 0

*.htm*でよければ,*.htmを探せば引っかかってきます。


これは,*.htmlの短いファイル名の拡張子が.htmだからです (短いファイル名の生成を抑制している場合を除く)。

まじめにやるなら,フィルタリングすることになります。
VB 2008 + .NET Framework 3.5前提のコードですが,
Dim files = _
 From file In Directory.GetFiles("C:\aaa", "*", SearchOption.AllDirectories) _
 From extension In New String() { ".htm", ".html" } _
 Where String.Compare(Path.GetExtension(file), extension, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase) = 0 _
 Select file
で*.htmと*.htmlの含まれたIEnumerable(Of String)が得られます。
配列が必要ならばToArray拡張メソッドを使ってください。
    • good
    • 0

こんにちは



>"*.html"のように1種類の場合はできるのですが…。

html,htmのみと言うのは、ヘルプ見ると
むずかしそうですが。
逃げ道として、"*.htm?"が使えそうです。

これなら、html,htmとhtmから構成される
拡張子全部ヒットしますが。
?は、一文字なので、
htma~htmzのような他になければ
代替が利くかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!