WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:フォルダ内のファイル数の調べ方

0:[投稿] カケダシ [2002/04/19 19:23 ][環境:WIN+IE WIN系+Perl]

カケダシと申します、
フォルダ内にあるテキストファイルを読み込んで
10個分出力するPerlCGIを作っているのですが、
ファイル数が10個に満たない場合やファイル数を超えた時に
ループから抜け出ることが出来ません。
そこでフォルダ内にあるファイルの数を求めて、
最大値まできたら抜け出すWhile文を書きたいのですが、
どうすればフォルダ内のファイル数を求めることが
出来るのでしょうか?
どなたか宜しくお願いします。


1:[回答] えび [2002/04/19 20:46 ]

opendir 関数で取得して、. と .. 以外の数を数えればよろしいかと。


2:[完了] カケダシ [2002/04/19 21:16 ]

えびさん返答ありがとうございました。
ご指摘の通りopendirを使うことで出来ました。
下のコードになったのですが、もっとスマートな
やり方はあるのですか?
本当にありがとうございました。

opendir(DIR, "txt");
@file = readdir(DIR);
closedir(DIR);
$file = @file;
print $file-2;


3:[関連] itiji [2002/04/20 01:18 ]

こんなんどうでしょ?

@file_list = glob("./txt/*");
$ix=0;
foreach $filename (@file_list) {
next if(-B $filename); # バイナリファイルはカウントしない
last if($ix++ >= 10);

# $filename のopenとか読込みとかprintとかcloseとか…
}

winやmacでは×かも。
リストの要素には「./txt/ファイル名」が格納されます。
ただしカレントディレクトリ「.」や親ディレクトリ「..」、配下のディレクトリは除かれます。

拡張子が決まってるならバイナリファイルを除く判定がいらないかな。
拡張子が「txt」なら・・
@file_list = glob("./txt/*.txt");


4:[回答] ふじ [URL] [2002/04/21 00:13 ]

> next if(-B $filename); # バイナリファイルはカウントしない
日本語文字列が含まれるファイルに対しては、ファイルテスト演算子の
-B -T は使えないと考えたほうがいいです。
バイナリファイルと判定されることが多いですから。

glob は便利ですけど、内部でシェル (csh) のプロセスを起動するので
CGI ではあまり多用したくないような。


5:[回答] --- [2002/04/21 08:51 ]

opendir DIR , "./txt/";
for ( grep /.+\.txt$/, readdir DIR ) {
print;
last if $flag++ >= 10;
}
closedir DIR;


6:[完了] カケダシ [2002/04/22 15:13 ]

完了後にも質問にお答え頂き有難うございました。
自分の知らない方法でサンプルを書込んで頂いて感謝します。
分からない部分もあるのでもう少し勉強し参考にしたいと思います。
返答が遅れてすみませんでした。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World