• ベストアンサー

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

  • あるフォルダの中にあるファイル数を『簡単に』求めるには??

    あるフォルダの中にあるファイル数を カウントしたいのですが、どのようにすればよいでしょうか? DIR 関数を使って、そのフォルダの中に あるファイルがなくなるまでカウントする方法以外 で何かもっと、簡単な方法はありませんでしょうか? 動作が速い方法がよいです。 どなたか教えてください。よろしくお願いします。

  • フォルダの中に1個しかファイルがないのに、プロパティーではファイル数が2個となっている

    あるフォルダを開いたら中には一つしかファイルがないのに、そのフォルダのプロパティーをみると、ファイル数:2となっていて、サイズも中に入っているファイル以上の数値が表示されています。(フォルダのサイズは1.31Mと表示され、中に入っているファイルは7KBしかありません。)コントロールパネルから隠しファイルも表示されるようにしましたが、やはり、フォルダの中には1個しかファイルが表示されていません。これはなぜなのでしょうか?教えてください。

  • フォルダー内のファイルの数をカウントしたい

    Win7とMS Officeの組合せで、別々の階層内にあるファイルの数を数えたいのですが。 具体的には「部署名」⇒「アルファベット、50音別」⇒「品種別」⇒「品質」というフォルダー構成が有って、その最下層の「品質」フォルダーの中にあるファイルの中で、ファイルの作成日の期間を指定して、品種別の「品種」フォルダーの中のファイルの数を知りたいのですが。 例えば”A123”という品種や”B123"という品種・・・・等々約300品種あって、各品種のフォルダーの中の「品質」というフォルダーの中に保存されている、2014年~2016年の間に作成されたファイルの数を知りたいのです。 具体的な結果としては、”A123"という品種の「品質」フォルダーの中のファイル数は10個、”B123"の「品質」フォルダーの中にはファイルが50個、・・・というように品種毎の「品質」フォルダーの中の(直近)3年間分のファイル数を知りたいのですが。 自分の常識、知識ではとても出来ないと思うのですが、何とかなれば非常にありがたいので質問させていただきます。

  • 指定したフォルダにアップロード

    Perlを使用してアップローダーを作成しました。 今までは # 受信データを書き込む open OUT,">$fnme"; binmode OUT; print OUT $in{'upfile'}; close OUT; としていたんですが、これではファイル数が多くなった時にエライことになるので、ディレクトリを作成してその中に…と思いまして。 で、ディレクトリをオープンが opendir DIR, "$folder_name"; ということはわかったのですが、 これを上記と組み合わせるにはどうしたらいいのでしょうか? ためしに opendir DIR, "$folder_name"; open OUT, ">$fnme"; binmode OUT; print OUT $in{'upfile'}; close OUT; closedir folder; としてみましたが、普通にcgiがあるフォルダにアップロードされてしまいました(^^; ディレクトリの中のファイル名を取得とかはあったんですが、指定のフォルダにアップロード、が見つからなくて…。

    • ベストアンサー
    • Perl
  • フォルダの中のファイルが開かなくなりました。

    フォルダ内にあるファイルが、ダブルクリックしても開かなくなり困っています。 ダブルクリックをするとフリーズしてしまい、タスクマネージャーで開いているフォルダを終了させないとなりません。このとき、フォルダは「応答無し」になっています。 ワードやエクセルのファイル、画像ファイル等全て開きません。 ディスクトップにファイルだけをドラッグ&ドロップでコピーしダブルクリックすると、重いですが開きます。 このとき、何かフォルダが開いているとフリーズします。 また、フォルダ内ファイルを右クリックの「プログラムを指定して開く」で開いても開けます。 ウイルスチェックかけたり、ディスクのスキャンしたり、いろいろこちらで検索もしたのですが、解決できなく困っています。 OSはWindows XPです。 よろしくお願い致します。

  • フォルダプロパティのファイル数と実際のファイル数

    あるフォルダのプロパティを見てみると、ファイル数:549となっていましたが、実際その中に入っているファイルは1つ少ない548になっている事に最近気づきました。 少し調べてみると、フォルダオプションで『すべてのファイルとフォルダを表示する』にチェック、『保護されたオペレーティングシステムファイルを表示しない(推奨)』のチェックを外すと半透明な隠しファイルが表示され、それを含みもう一度数えてみると、フォルダプロパティのファイル数と実際のファイル数が一致する事がわかりました。 この、隠しファイルを表示しない設定でもフォルダオプションでは隠しファイルを読み込んでしまいフォルダプロパティのファイル数が実際のファイル数より少し(?)多めに表示されるのは標準の仕様なんでしょうか?普段は隠しファイルを表示せずに作業をしていますのでフォルダプロパティのファイル数と実際のファイル数が違うと少し気持ち悪く思ってしまいます・・・。 ご存知の方教えていただけませんでしょうか?

  • フォルダごとのファイル数を数えるためのバッチ

    フォルダごとのファイル数を数えるためのバッチをネットで調べて作成しました。 このバッチファイルを親フォルダ直下に配置し、ダブルクリックで実行しています。 ------------------------------------------------------------------------- @echo off setlocal enabledelayedexpansion set /a counter=0 dir %1 /ad /s /b >trash.csv for /f "tokens=1 delims=," %%i in (trash.csv) do ( set /a counter = 0 for %%A in (%%i\*) do ( if exist %%A ( set /a counter=counter+1 ) ) echo %%i : !counter! ) ------------------------------------------------------------------------- しかし、結果は、フォルダ名は取得していますが、ファイル数が取得できていません。 こんな感じです。 setlocal コマンドに無効なパラメータが指定されました d:\画像\フォルダ1 = 0 d:\画像\フォルダ2 = 0 d:\画像\フォルダ1\フォルダ3 = 0 どたなかどこが間違っているのかご指摘ください。

  • フォルダにあるファイル数の数を調べたい

    特定のフォルダに入っているファイルの数を調べる場合、瞬時にファイルの合計数が分かるような便利な機能はありませんでしょうか?

  • フォルダの中のファイルが消えてしまいました

    私のパソコンのドキュメントに保存してあるフォルダの中のファイルが消えてしまいました。 私は、ドキュメントの中に10個くらいフォルダをつくっていますが、その中の2つのフォルダの中が空になってしまったのです。 隠しファイルも含めてすべてを表示するという操作をしましたが出てきません。 また、検索で記憶しているファイル名を検索するとそのファイルが出てくるのですが開くことができません。 なんとか消えてしまったファイルを見つけることはできませんでしょうか? また、自分では削除した覚えのないファイルが突然消えてしまうことがあるのでしょうか? 本当に申し訳ございませんが、お教えいただければ助かります。 よろしくお願いいたします。

  • CGIで作ったファイルやフォルダを消したい

    KY-VIEWメガロポリスをvirtualave.netに設置して、 テスト的に掲示板を作っただけで使わないでいたのですが、 使う必要が出てきたため、掲示板をスプリクトごと全部削除しようと思い。削除しようとしたのですが、 いつのまにか、sendmailがqmailに変更されてしまったため、 確認キーの再発行が不可能になり、掲示板を消すことが出来なくなってしまいました。 また、nobody権限で作られたファイルやフォルダが残ってしまうためFTPソフトから削除も出来ません。 perlで作ったnobody権限のファイルやフォルダは、perlで消せると聞いたのですが、その方法を教えてください。

    • ベストアンサー
    • CGI