パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
ファイルへのアクセス(ファイル名の取得) (DriveListBox, DirListBox, FileListBox)
Visual Basicではファイルにアクセスできるように、DriveListBox, DirListBox,
FileListBoxという3つの
オブジェクトを用意しています。これらのオブジェクトを使用してファイルにアクセスする方法について
説明します。
1 ファイルへのアクセス方法
DriveListBoxはドライブを検索する機能、DirListBoxはフォルダを検索する機能、
FileListBoxは
ファイルを選択する機能を持っています。Visual Basicでファイルの選択をする場合には、この3つの
オブジェクトを使った定番の方法があります。
シンプルな例として、ファイルを選択してそのファイルのダンプを表示するプログラムを作成してみます。
(1) フォームの配置
下図のように、フォーム上にDriveListBox, DirListBox, FileListBoxと、テキストボックスを2つ、
コマンドボタン1つを配置します。DirListBox, FileListBoxは5,6個のフォルダ、ファイルが表示
できる大きさにしておくのがいいでしょう。
テキストボックスは、選択されたファイル名表示用のText1と、ダンプ表示用のText2です。
(図1)
(2) DriveListBoxのコード
Changeプロシージャに、たった1行ですが以下のコードを記述します。これで、ドライブリストボックス
で、選択したドライブが変更されると(選択されたドライブ名は、Driveプロパティに取得されます)、
ディレクトリリストボックスのPathプロパティに代入することで、ディレクトリリストボックスにも変更を
連動させます。
ここで一点注意があります。上記の図1のように、d:ドライブを選択した場合、
Drive1.Driveプロパティには、"d:"が設定されますが、Dir1.Pathプロパティには"d:\"が設定されます。
ルートディレクトリの場合にはPathプロパティには"\"が含まれていることに注意して下さい。
Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub |
(3) DirListBoxのコード
同様に、ディレクトリリストボックスで選択したフォルダが変更されると、ファイルリストボックスにその
変更を連動させます。図1のように、win95\newgame というフォルダを選択すると、Pathプロパティには、
"d:\win95\newgame"が設定されます。
File1.PathとDir1.Pathともに、"d:\win95\newgame"が設定されます。
ルートディレクトリ以外では、パス名の最後に"\"を含まない点に注意して下さい。
Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub |
(4) DirListBoxのその他のプロパティについて
ディレクトリリストボックスで今回は使用していませんが、
覚えておいたほうがよいものに、List, ListCount, ListIndex というプロパティがあります。
ディレクトリリストボックスでダブルクリックされた項目がカレントディレクトリとなり、Pathプロパティ
に代入されますが、そのカレントディレクトリのListIndexが-1に設定されます。カレントディレクトリ
より上に表示されているフォルダのListIndexは-1づつへっていき、下のフォルダのListIndexは1づつ
増えた値になります。
今回の場合は図2のように、newgameがカレントディレクトリなので、ListIndexの値は-1となり、
win95が-2、applecatchが0となります。
(図2)
Listプロパティは、List(n)でディレクトリボックス内のフォルダ名をあらわします。nの値はカレント
ディレクトリが-1となります。(すなわちListIndexの値と同じ)。
Dir1.List(0)とすると、上記の場合"applecatch"をあらわすことになります。
ListCoutはリストの項目の総数を表します。
(5) FileListBoxのコード
ファイルリストボックスでファイル名をクリックすると、テキストボックスText1に、ファイル名を表示させます。
Filenameプロパティには、ファイルネームだけが取得されます。
Private Sub File1_Click() Text1.Text = File1.Filename End Sub |
(6) FileListBoxのその他のプロパティ
ファイルリストボックスにも今回は使用していませんが、List, ListCount, ListIndex というプロパティ
があります。
ファイルリストボックスの場合は、リストの一番上のListIndexが0、下にいくと1づつ増えた値に
なっていきます。
今回の場合は71a0.lzhのListIndexが0、access010319.txtが1となります。
(図3)
List(n)は、ファイルリストボックスのn番目のファイル名をあらわします。
ListCoutはリストの項目の総数を表します。
ファイルリストボックスで重要なプロパティにもうひとつ、Patternプロパティがあります。
Patternプロパティは、ファイルリストボックスに表示されるファイル名を示すパターンマッチ
文字列を指定します。
File1.Pattern = "*.*" とすると全てのファイルを表示します。
例えば、ビットマップだけを表示させる場合は、File1.Pttern = "*.bmp"
とします。
セミコロンで区切ることにより、複数パターンの指定もできます。WORDとEXCELファイル
の表示を行う場合は、File1.Pattern = "*.doc"; "*.xls"
とすればよいわけです。
更に、ある属性のファイルをファイルリストボックスに表示するか否かを決めるプロパティとして
以下のようなものがあります。Trueに設定すると、リストに表示され、Falseに設定すると表示されなく
なります。
Archive アーカイブ属性
Hidden 隠しファイル属性
Normal 通常属性
ReadOnly 読み出し専用属性
System システム属性
例えば、File1.System = False とすると、システム属性のファイルはファイルリストボックスに表示されなく
なります。
(7) コマンドボタンのソースコード
コマンドボタンをおすと、ダンプ表示をします。
ダンプ表示の部分は今回の説明から省きます。
(あ)の行に注意してください。
ルートディレクトリの場合、Pathプロパティに"\"が含まれていると上で説明しましたが、例えば
"d:\abc.txt"というルートディレクトリのファイルを選択した場合、File1.Pathには"d:\"が設定
されますので、"\"を取り除いておかないと、(い)の行の演算で"\"がダブッて、ファイル名を
含むパス名が、"d:\\abc.txt"になってしまいます。
そこで、(あ)のとおり、ルートの場合は"\"を取り除く作業をしておきます。
Private Sub Command2_Click() Dim b() As Byte Dim f$, t$ Text2.Text = "" f$ = File1.Path If Right$(f$, 1) = "\" Then f$ = Left$(f$, 2) ' ・・・(あ) f$ = f$ + "\" + Text1.Text ' ・・・・(い) Open f$ For Binary As #1 s = LOF(1) ReDim b(s) MsgBox (Hex$(s)) Get #1, , b() Close t$ = t$ + " " For i = 0 To 15 t$ = t$ + "0" + Hex$(i) + " " Next t$ = t$ + Chr$(13) + Chr$(10) For i = 0 To s - 1 If (i Mod 16) = 0 Then t$ = t$ + Right$("000" + Hex$(i), 4) + ":" End If t$ = t$ + Right$("0" + Hex$(b(i)), 2) + " " If (i Mod 16) = 15 Then 't$ = t$ + " " 'k = i 'For j = k - 15 To k 't$ = t$ + b(j) 'Next t$ = t$ + Chr$(13) + Chr$(10) End If Next Text2.Text = t$ End Sub |
2 その他のファイルアクセス方法(コモンダイアログ)
この方法とは別に、コモンダイアログを使ってファイルを開くためのダイアログボックスを
表示させる方法があり、その方がお手軽です。コモンダイアログを使う方法は別の機会に
取り上げたいと思います。