• ベストアンサー

フォルダの中の特定のファイルを取得

(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種類の場合はできるのですが…。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

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 といった具合で ...

その他の回答 (2)

回答No.3

*.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拡張メソッドを使ってください。

  • tom11
  • ベストアンサー率53% (134/251)
回答No.1

こんにちは >"*.html"のように1種類の場合はできるのですが…。 html,htmのみと言うのは、ヘルプ見ると むずかしそうですが。 逃げ道として、"*.htm?"が使えそうです。 これなら、html,htmとhtmから構成される 拡張子全部ヒットしますが。 ?は、一文字なので、 htma~htmzのような他になければ 代替が利くかもしれません。

関連するQ&A

  • フォルダ内取得について

    質問です。 「あるフォルダ以下にあるファイルをすべて取得する」で、 Dim files As New ArrayList '"C:\My Documents"以下のファイルをすべて取得 GetAllFiles("C:\My Documents", "*.*", files) 'ListBox1に結果を表示する ListBox1.Items.AddRange(files.ToArray()) でフォルダ内を取得する方法は分かっていますが、 この取得したファイル以外で特定のファイル以外を 削除する事は出来ますでしょうか? 例えば Test1.txt←必要 Test2.txt←不要 Test3.txt←必要 でファイル取得した時に ("Test1.txt")と("Test3.txt")だけ残して 他は削除したいのです。 必ずしも"test2.txt"という名前ではありません。 この行動を文法(ソース)を書きたいのですが、 分かりません。 どなたか教えてください。

  • リストボックスにファイル名のみを表示するには?

    いつもお世話になっています。 今、VisualStudio.NETのVB.NETを使用して勉強しているものです。 現在、特定のフォルダからその中に入っているファイルを リストボックスに表示させたいと思っています。 フルパスを表示させることはできたのですが、ファイル名のみの表示がうまくいきません。 どなたか教えていただけないでしょうか。 以下のようにコードを書いております。 一度、TextBox1にフォルダのパスをコピーする仕組みになっています。 GetFileName関数を使用すればいいのかもしれませんが、 うまく組み合わせることができません。 どうぞよろしくお願いいたします。 Private Sub GetAllFiles(ByVal folder As String, _ ByVal searchPattern As String, ByRef files As ArrayList) 'folderにあるファイルを取得する Dim fs As String() = _ System.IO.Directory.GetFiles(Me.TextBox1.Text, searchPattern) 'ArrayListに追加する files.AddRange(fs) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim subFolders As New ArrayList() Dim files As New ArrayList() 'TextBox1以下のファイルをすべて取得 GetAllFiles(Me.TextBox1.Text, "*.*", files) 'ListBox1に結果を表示する Me.ListBox1.Items.Clear() Me.ListBox1.Items.AddRange(files.ToArray()) End Sub

  • 特定フォルダ内のファイル名取得について

    こんばんわ。お世話になってます。 あるフォルダ内(C\MyForder)に保存している様々なファイル名(エクセルやワード等が保存) をUserForm内のListBoxに表示させたいのですが、どのようにしてファイル名を取得したら良いのでしょうか? また、ListBoxに表示されたファイル名を選択すると、そのファイルを 起動させたいと思っています。ご教示お願いします。

  • ファイルをドラッグドロップでTextBooxにファイル名を出したい

    下記のサンプルコードをWEBサイトで見つけたので ListBox1というところをTextBox1と直して テキストボックスにファイルのフルパスが出るように したかったのですが、Listbox1だと正常なのですが、 TextBox1に変更すると動作しなくなってしまいます。 最後の部分の ListBox1.Items.AddRange(e.Data.GetData(DataFormats.FileDrop))は TextBox1.Text=e.Data.GetData(DataFormats.FileDrop) に変更してあります。 正常に動作するにはどこを直したらよいか教えて頂きたいです。 宜しくお願いします。m(__)m --------------------------------------------------- Private Sub ListBox1_DragEnter(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragEnter '関連連づけの確認をしています。 'この場合、ドラッグアンドドロップの形式であるかどうか? If e.Data.GetDataPresent(DataFormats.FileDrop) Then 'ドロップ効果を取得 e.Effect = DragDropEffects.Copy Else 'ドロップ効果を破棄 e.Effect = DragDropEffects.None End If End Sub Private Sub ListBox1_DragDrop(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragDrop 'DragEnterイベントで、取得した情報を追加 ListBox1.Items.AddRange(e.Data.GetData(DataFormats.FileDrop)) End Sub

  • 100万行位のファイルを出来るだけ速くListBoxに登録したい

    vbCrLfで区切られた100万行位のテキストファイルがあり、 これを出来るだけ速くListBoxに登録するには どのような方法が良いでしょうか。 現在はStreamReaderで変数strに読み込んで、 Dim Data() As String = Split(str,vbCrLf)で配列に読み込み、 ListBox1.Items.AddRange(Data) で登録しているのですが、何分もかかってしまいます。 良い方法がありましたら、ご教示頂けると助かります。

  • C#を勉強していて、指定したフォルダから画像を読み込んでピクチャボック

    C#を勉強していて、指定したフォルダから画像を読み込んでピクチャボックスに次々と表示するスライドショーを作っています。 それで次のように作りました。 string[] files = System.IO.Directory.GetFiles(@"c:\test\", "*.jpg");  foreach (string file in files)  {   pictureBox1.Image = Bitmap.FromFile(file);   this.pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; Thread.Sleep(1000);  } しかしこれではフォルダの最後の画像しか表示されません。 この場合次々と画像を表示するにはどうしたらいいか教えてください。

  • フォルダ内のファイル名取得の仕方が分かりません

    Apache2.0.47、PHP4.3.2で使用しています。 フォルダ内のファイル名の取得を以下のように書いています。 (scandirは使えませんでした) <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } sort($files); print_r($files); ?> "."と".."も取得されるので、以下のように変更したのですが同じ結果でした。 <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { if(filename!=". "){ if(filename!=".. "){ $file[] = $filename; } } } sort($files); print_r($files); ?> "."と".."をはぶいたファイル名だけを取得したい場合にはどうすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • Visual C++でフォルダ内のすべてのファイルを取得する

    現在Visual C++を使ってプログラミングをしているのですが、 その中で指定したフォルダ以下のすべてのファイル(もしくは特定の拡張子のファイル)を取得する必要性がでてきました。 しかし、他サイトを見て回ってもVisualC#での方法はいくつか載っているのですが、C++での方法は書かれていませんでした。 例 ttp://jeanne.wankuma.com/tips/cpp/directory/getfiles.html 上記のサイトの方法では、C++ではfoeach文が使えないので、当然そのままでは利用できませんでした。 何か他によい方法があれば、ご教授をお願いします。

  • ”ListBoxへのAddでエラー”

    タイトルの通りです。 DoubleからStringの型変換が不可なんでしょうか? ”.ToString” によってエラーになってるようです。 For~Eachでの3行で処理するとOKなのですが1行で なんとかならないものかと調べていましたが、いきずまっています。 Items.AddではなくItems.AddRangeを使う場合、どういうふうに 書くんでしょうか?。ちなみに、配列がString型の場合にはエラー にならないことは知っています。(.ToStringも不要) ’--------サンプル---------- Public Class Form1 Private Sub Button1_Click() Handles Button1.Click Dim Test_arr() As Double = {1.4, 1.2, 1.9, 1.7, 1.4, 2.8, 1.2, 3.2, 1.99, 4.2} ListBox1.Items.AddRange(Test_arr.ToString) '←この行でエラー For Each x As Double In Test_arr '←これはOK ListBox1.Items.Add(x.ToString) ' Next ' End Sub End Class エラー内容は、↓ ------------------------------------------------------------------ エラー 1 これらの引数で呼び出される、アクセス可能な 'AddRange' が ないため、オーバーロードの解決に失敗しました: 'Public Sub AddRange(items() As Object)': 型 'String' の値を 'Object の 1 次元配列' に変換できません。 'Public Sub AddRange(value As System.Windows.Forms.ListBox.ObjectCollection)': 型 'String' の 値を 'System.Windows.Forms.ListBox.ObjectCollection' に変換できません。 ------------------------------------------------------------------ どなたかご教授願えれば幸いです。環境はVisualBasic2010+WindowsXPです。

  • FTPにフォルダのファイル全部をアップするには?

    Visual Basic 2010 で、ローカルの指定フォルダに作ったファイルを、FTPの指定フォルダに全てアップロードする方法を探しています。 http://dobon.net/vb/dotnet/internet/ftpwebrequest.html を参考にしましたが、ここや、Googleで見付かるサンプルコードは、1:1でファイルをアップするものばかりで、フォルダにあるファイル全部をアップロードするものはなかなかありません。 そこで、上記サイトを参考に次のようなモジュールを組んでみました。 Form1 には、テキストボックスとボタン、リストボックスを配置してあります。 Private ftpCredential As System.Net.NetworkCredential ------------------------- Sub main1() Dim Dname As String = Form1.TextBox1.Text Dim Rname As String ftpCredential = New System.Net.NetworkCredential("username", "password") Form1.ListBox1.Items.Clear() ''テキストボックスのフォルダの全ファイル一覧を取得 For Each FName As String In IO.Directory.GetFiles(Dname) Rname = FName.Replace(Form1.TextBox1.Text & "\", "") UploFtpFile("ftp://ftp.hogehoge.ne.jp/www/" + Rname, FName) Form1.ListBox1.Items.Add(Rname) Next DisconnectFtp("ftp://ftp.hogehoge.ne.jp/") End Sub ------------------------- Sub UploFtpFile(ByVal rmFile As String, ByVal loFile As String) Dim ftpReq As System.Net.FtpWebRequest = _ CType(System.Net.WebRequest.Create(rmFile), System.Net.FtpWebRequest) ftpReq.Credentials = ftpCredential ftpReq.Method = System.Net.WebRequestMethods.Ftp.UploadFile Dim reqStrm As System.IO.Stream = ftpReq.GetRequestStream() 'アップロードするファイルを開く Dim fs As New System.IO.FileStream( _ loFile, System.IO.FileMode.Open, System.IO.FileAccess.Read) 'アップロードStreamに書き込む Dim buffer(1023) As Byte While True Dim readSize As Integer = fs.Read(buffer, 0, buffer.Length) If readSize = 0 Then Exit While End If reqStrm.Write(buffer, 0, readSize) End While fs.Close() reqStrm.Close() End Sub ------------------------- Sub DisconnectFtp(ByVal uri As String) Dim ftpReq As System.Net.FtpWebRequest = _ DirectCast(System.Net.WebRequest.Create(uri), System.Net.FtpWebRequest) ftpReq.Method = System.Net.WebRequestMethods.Ftp.PrintWorkingDirectory ftpReq.KeepAlive = False End Sub End Module ------------------------- テキストボックスをフォルダとして、そのフォルダ内のファイルを全て、順番にアップロードしていき、最後に切断というのが希望の動作です。 ステップオーバーしながら監視していた所では、希望通り次々とファイルをアップロードしているようです。 気になるのは、上記のサイトの下の方に、 「TPサーバーとの接続と切断を繰り返すように思われるかもしれませんが、そうではありません」とはあるものの、これで本当に接続は切れていないのか? 相手のFTPに過負荷になるのではないか? 接続の確立や、インスタンス処理に問題があるのではないか? という疑問があります。 コードとして問題がないようでしたら、本番のプロジェクトのモジュールに組み込んで、自動ファイル生成から、そのアップロードまでが完成するのですが… なにか問題になりそうなところがあったり、「連続で全ファイルアップするなら、もっと簡単な方法があるよ」と御存知の方がいらしたら、教えてください。 よろしくお願いします。