• ベストアンサー

cgiでのフォルダの中のファイル数

カレントフォルダの中にある画像ファイルの数を数えたいのですが、どのようにすればいいでしょうか? (画像ファイル、と指定ができない場合はカレントフォルダの中にあるすべてのファイル数) opendirとか使えばできますか? #perlです。

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

  • ベストアンサー
  • HUTABA
  • ベストアンサー率27% (436/1611)
回答No.3

opendir(FOLDER,"meibo"); @list = readdir(FOLDER); closedir(FOLDER); my ($cnt) = 0; foreach (@list) {  if ($_ =~ /.+\..+/) { $cnt++; } } とすれば、「ファイルと思われる物」の数をカウントします。 このforeach文を foreach (@list) {  if ($_ =~ /.+\.jpg$/) { $cnt++; }  elsif ($_ =~ /.+\.jpeg$/) { $cnt++; }  elsif ($_ =~ /.+\.jpe$/) { $cnt++; }  elsif ($_ =~ /.+\.gif$/) { $cnt++; }  elsif ($_ =~ /.+\.png$/) { $cnt++; }  elsif ($_ =~ /.+\.bmp$/) { $cnt++; } } とすれば、「JPG、GIF、PNG、BMPファイルと思われる物」の数をカウントします。

KODAMAR
質問者

お礼

無事できました。 ありがとうございます。 質問なのですが、 if ($_ =~ /.+\..+/) { $cnt++; } はどういう意味なのでしょうか?

その他の回答 (3)

  • HUTABA
  • ベストアンサー率27% (436/1611)
回答No.4

>if ($_ =~ /.+\..+/) { $cnt++; } >はどういう意味なのでしょうか? 簡単な正規表現です。 この例の場合、「何文字か文字が続いた後に"."があって、さらに何文字か文字が続く」という意味です。 正規表現については、とほほのWWW入門でも詳しく解説されていますし、正規表現だけを取り扱ったサイトもたくさんありますので、色々なサイトを見て勉強されれば良いと思います。

参考URL:
http://tohoho.wakusei.ne.jp/wwwperl1.htm#Expr
KODAMAR
質問者

お礼

説明ありがとうございます。 正規表現はどうしても苦手で…。 でも避けて通れない道ではあるんですよね。 ありがとうございました。

  • HUTABA
  • ベストアンサー率27% (436/1611)
回答No.2

#1です。 >これでファイル数が取得できているのでしょうか? 全てのエントリ(ファイル・フォルダ)を取得しています。 パソコンをDOS画面で使用した事はありますか? DIRコマンドを実行すると、自分のいるディレクトリ、1つ上のディレクトリが「.」と「..」で表されますよね? それもエントリとして取得されています。 ですから、#1に書いたように関数だけに頼らず、ご自身でファイルを選別する必要があります。

KODAMAR
質問者

お礼

再度回答ありがとうございます。 >全てのエントリ(ファイル・フォルダ)を取得しています。 >関数だけに頼らず、ご自身でファイルを選別する必要があります。 実際にはどのようにしたらいいのでしょうか? DOSは使用したことありますがあまり詳しくはわかりません。 よろしくお願いします。

  • HUTABA
  • ベストアンサー率27% (436/1611)
回答No.1

opendir()した後にreaddir()でエントリの一覧を取得し、そこからディレクトリを除外するか、拡張子で必要なファイル数をカウントすればできますよ。

参考URL:
http://tohoho.wakusei.ne.jp/wwwperl2.htm#DirIo
KODAMAR
質問者

お礼

回答ありがとうございます。 とほほさんのところも見ましたがイマイチ理解できていません…。 以下のような構造になっています。  ┗meibo    ┣meibo.cgi    ┣1.jpg    ┣2.jpg    ┣3.jpg      :    ┗197.jpg この「meibo.cgi」でjpgファイルの数を数えたいのです。 opendir(FOLDER,"meibo"); while($folders = readdir(FOLDER)) {print "$folders\n";} closedir(FOLDER); としてみましたが…。 これでファイル数が取得できているのでしょうか?

関連するQ&A

専門家に質問してみよう