ディレクトリ(フォルダ)内のファイルの一覧表示

CGIテクニック集トップへ





概要

ファイルリスト3等のようにディレクトリ内のファイルをブラウザ上に一覧表示します。

必用な処理

  1. オープンするディレクトリを開く
  2. ディレクトリ内のファイルを配列に挿入
  3. 配列内から必用なファイルのみ抽出
  4. 配列の内容を表示

サンプルコード

 my $dir = "filedir";
 
 opendir(DIR, "$dir") or die "ディレクトリ$dirが開けません";
 my @filelist = grep !/^\./, readdir DIR;
 closedir(DIR);
 
 print "<ul>\n";
 foreach my $file (@filelist){
    print "<li>$file</li>\n";
 }
 print "</ul>\n";

コードの解説

 my $dir = "filedir";
 
 opendir(DIR, "$dir") or die "ディレクトリ$dirが開けません";
 my @filelist = grep !/^\./, readdir DIR;
 closedir(DIR);

$dirにはリスト表示させたいディレクトリ名を保存します。 opendirで$dirをオープンします。失敗すればエラーメッセージと共にスクリプトは終了します。 ファイルハンドルDIRの内容をreaddirで取り込みます。その出力をgrep !/^\./により.で始まるファイル名を除いて配列@filelistに入力します。抽出したいファイル名だけ@filelistに入れるなどの処理もgrepにより可能です。@filelistにはディレクトリfiledir内に格納されている全てのファイル(.から始まるファイルを除く)が入っています。ファイルハンドルDIRに対して必用な処理はこれだけなのでDIRをクローズします。


 print "<ul>\n";
 foreach my $file (@filelist){
    print "<li>$file</li>\n";
 }
 print "</ul>\n";

foreachで@filelistに入っているファイルを一つずつ表示します。ここでは便宜上<li></li>で囲まれたHTMLとして出力しています。@filelistのファイルそれぞれに対して表示以外の必用な処理をすることも可能です。表示される順番は保障されません。 ソートして出力する場合はファイルのリストをアルファベット順でソートファイルのリストを更新順でソートを参照ください。

関連するCGIテクニック

ファイルのリストをアルファベット順でソート
ファイルのリストを更新順でソート
サブディレクトリ内にある全てのファイルを抽出する方法