サンプル
コードのダウンロード (vbmigtips_File.exe, 94.7
KB)
ディレクトリ内のフォルダやファイルを検索したい場合があると思います。そこで今回、Viusal Baic 6.0 と
Visual Basic .NET
それぞれでのディレクトリ内のファイルを列挙する方法について紹介します。今回は、取得したフォルダやファイルのパスをリストボックスに表示します
(図1)。
.gif)
図1
Visual Basic 6.0 では、FileSystemObject の Files
プロパティを使い、指定したディレクトリ内のすべてのファイルを取得します。実装コードは以下のとおりです (事前に、[プロジェクト]
メニューの [参照設定] で「Microsoft Scripting
Runtime」にチェックを付けておく必要があります)。
| Private Sub Command1_Click() Dim lIndex As
Long Dim hFolder As
Folder Dim hFile As
File Dim Fso As
FileSystemObject List1.Clear Set Fso = New
FileSystemObject Set hFolder =
Fso.GetFolder("C:\Foo\") lIndex =
0 For Each hFile
In hFolder.Files List1.List(lIndex) =
hFile.Path lIndex = lIndex
+ 1 Next
hFile Set Fso =
Nothing Set hFile =
Nothing Set hFolder =
Nothing End
Sub |
リスト1
上記 (リスト1) のコードでは、C
ドライブ内の Foo フォルダの中にあるすべてのファイルを取得し、「List1.List(lIndex) =
hFile.Path」で取得したファイル名のパスをリストボックスに追加します。上記を実装し、図1 の「File
Only」ボタンをクリックすると、図2 のように Foo フォルダの中にあるすべてのファイルが表示されます。
.gif)
図2
リスト1
では、ファイルを取得しましたが、SubFolders
メソッドを使用することで指定したディレクトリ内のすべてのサブフォルダを取得することができます。実装コードは以下のとおりです。
For Each subFolder In
hFolder.SubFolders
List1.List(lIndex) =
subFolder.Path lIndex = lIndex
+ 1 Next
subFolder |
リスト2
上記 (リスト2)
は、C ドライブの Foo フォルダ内にあるすべてのフォルダを取得し、リストボックスに追加します。上記を実装し、図1 の「Folder
Only」ボタンをクリックすると、図3 のように Foo フォルダの中にあるすべてのフォルダが表示されます。
.gif)
図3
一方、Visual
Basic .NET では、Directory クラスに GetFiles メソッドが用意されています。GetFiles
メソッドは、特定のフォルダ、およびファイルを検索するだけでなく、ある条件を満たしたすべてのフォルダやファイルを列挙することもできます。
| Private Sub Button2_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click ListBox1.Items.Clear() For Each
strPath As String In System.IO.Directory.GetFiles("C:\Foo\",
"*") ListBox1.Items.Add(strPath) Next
strPath End
Sub |
リスト3
上記 (リスト3) のコードでは、C
ドライブ内の Foo
フォルダの中にあるすべてのファイルを取得し、「ListBox1.Items.Add(strPath)」で取得したファイル名のパスをリストボックスに追加します。上記を実装し、図1
の「File Only」ボタンをクリックすると、図2 のように Foo
フォルダの中にあるすべてのファイルが表示されます。
今回は、すべてのファイルを取得しましたが、たとえば、GetFiles
メソッドの第2 パラメータに "*.txt" を設定すると、指定したパスの配下にあるすべての txt
ファイルを取得することができ、"test.txt" と設定すると、指定したフォルダ内にある test.txt
ファイルを検索します。
また、GetDirectories メソッドを使用することで
指定したディレクトリ内のサブフォルダを取得することができます。指定したディレクトリ内のすべてのサブフォルダとファイルを取得する場合は、GetFileSystemEntries
メソッドを使用します。GetFileSystemEntries メソッドの実装コードは以下のとおりです。
| For Each strPath As String In
System.IO.Directory.GetFileSystemEntries("C:\Foo\", "*") ListBox1.Items.Add(strPath) Next
strPath |
リスト4
上記 (リスト4) は、C
ドライブの Foo
内にあるすべてのフォルダとファイルを取得し、リストボックスにそのフォルダまたはファイルのパス名を追加しています。上記を実装し、「ALL」ボタンをクリックすると、図4
のように Foo フォルダ内のすべてのフォルダとファイルのパスが表示されます。
.gif)
図4
このように、Visual
Basic 6.0 では Folder の SubFolders メソッドや Files メソッドを、Visual Basic .NET
では GetFiles メソッド、GetFileSystemEntries
メソッドを使用することで、指定したフォルダ内にあるすべてのフォルダやファイルに対し検索を行うことができました。しかし、これらのメソッドは、サブフォルダ内のファイルを検索できません。そのため、サブフォルダ内のファイルも検索したい場合には再帰呼び出し等を行い独自で実装する必要があります。