プログラム講座 初級編18

- ファイル一覧を表示しよう -

 初級編18です。今回は「ファイル一覧」を表示してみます。今回は「特定のフォルダ内」のファイル一覧をファイルとして作成、保存します。フォルダ内のファイル一覧が欲しい場合にはFuture BASICを使うと簡単にできます。




ディレクトリパスについて
 ファイル一覧を求める前に「ディレクトリパス(Directory Path」について説明しておきます。ディレクトリパスは、あるファイルが、どこのディスクの、どのフォルダにあるのかを示す1つの方法です。Macでは「ディレクトリID」を利用する方法と「パス名」を利用する方法があります。UNIX, MS-DOSでは「パス名」を利用する場合が、ほとんどです。初級講座ですので、まずは「パス名」を利用してファイル一覧を作成する事にします。
 ディレクトリパス(以下、パス名と同義として書きます)は、ボリューム名(ハードディスク等の名前)、フォルダ名を「:(コロン)」で区切ったものです。例えばMacというハードディスク内にあるABCというフォルダの中にあるmy.txtは以下のように示す事が出来ます。

Mac:ABC:my.txt

 同じフォルダにある場合は、何も指定しません。つまり同じフォルダ内にmy.txtというファイルがある場合は以下のようになります。

my.txt

 現在のフォルダの中にあるABCというフォルダ(サブディレクトリ)にmy.txtというファイルがある場合は以下のようにコロンを先頭に付加します。

:ABC:my.txt

 現在のフォルダより1つ上のフォルダABCの中にmy.txtというファイルがある場合は以下のようになります。

::ABC:my.txt




ファイル一覧
 今回は手抜きをしているため、プログラム中で指定してある「ディレクトリパス」(特定のフォルダ内のファイル)しか一覧を取ることが出来ません。(初級者講座と言うことで^^b)
 特定のフォルダ内のファイル/フォルダ一覧を取得するにはFILES$を使います。

「あれ?FILES$ってファイルのオープンダイアログや保存ダイアログを表示するときに使うのでは?」

 そうです、実は全く同じ命令で、渡すパラメーターが異なるだけです。ファイル一覧を取得する場合のパラメータは以下のようになっています。

ファイル/フォルダ名 = FILES$(カウンタ,"",ディレクトリパス,ボリューム参照番号)

 最初のパラメータが負数の場合ファイル/フォルダ名を返します(正数で特定値の場合にファイルオープン/保存ダイアログが出るわけです)。この場合、最初に記録されているファイル/フォルダの名前しか返しません。フォルダ内の全てのファイル/フォルダ一覧を取得するには、カウンタ(最初のパラメーター)を-1からはじめて、1づつ減らしていきます。もし、ファイル/フォルダを全て参照し終わった場合、ファイル/フォルダ名は「空文字」になります。全てのファイル/フォルダを読み出したかどうかは、FILES$が返した文字列が空文字かどうか調べる事で確認できます。
 この命令はファイル/フォルダ名を返すのですが、ファイル名が返されたか、それともフォルダ名が返されたか調べたい場合があります。この場合フォルダであれば一番右側の文字が必ず:(コロン)になります。コロンかどうか調べるには、

IF RIGHT$(fileName$,1) = ":" THEN PRINT "フォルダです"

 といった具合になります。



終わりに
 今回のプログラムは、特定のフォルダ内のファイル一覧しか求めることが出来ません。指定位置のファイルを指定して、そこのファイル一覧を求める場合は別の機会に解説します。先に「パス名」を得る部分について解説、プログラムの作成を行ってからになります。
 結局、あてにならない次回予告なので、上記の文章もあんまりあてにしてはいけません(笑)



今回のプログラムリスト
'------------------------------------------------------------------------ '"特定のフォルダのファイル一覧を表示する" '------------------------------------------------------------------------ LOCAL FN getFileList savefile$ = FILES$(_fSave,"保存ファイル名:","",vRefNum%):' "ファイル保存ダイアログを表示" LONG IF savefile$<>"" DEF OPEN "TEXTEdt7": ' "TEXT形式で保存。Edt7はEdit7というエディタ" OPEN "O",#1,savefile$,,vRefNum%: ' "保存するファイルの作成" count% = -1: ' "カウントの初期値(必ず負数!)" DO fname$ = FILES$(count%,"","!HD1GB:help:",vRefNum2%):' "ファイル名を1つ読み出す" PRINT fname$: ' "ウィンドウに表示" PRINT #1,fname$: ' "ファイルに書き出し" count% = count% - 1: ' "カウントを1減らす" UNTIL fname$="": ' "ファイル名が空文字になるまで繰り返す" CLOSE #1 END IF END FN WINDOW OFF: ' "起動時に自動的に開くウィンドウをオフ(非表示)" WINDOW #1,"File List",(0,0)-(320,440),_dialogMovable' "ウィンドウを開く" FN getFileList