ハードなソフトの話

アクセスカウンタ

zoom RSS PerlはglobよりもFile::Nextでファイル一覧

<<   作成日時 : 2011/11/09 11:23   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

Perlでファイル一覧を取得するのは glob、フォルダをたどっていくならFile::Findというのが一般的なようだけれど、File::Nextのほうが簡単でわかりやすい。

Windows版のActivePerlやでは標準モジュールとして組み込まれていし、strawberry perlでもcpanからインストールできる。使い方はこんな感じ:

use utf8;
use open IO => ":encoding(cp932)", ":std";
use Encode;
use File::Next;

my $path = 'c:/users/public/music' ;
my $files = File::Next::everything($path);
while ( defined ( my $file =decode('CP932',$files->()) ) ) {
     print $file,"\n";
}

次のように日本語や空白を含むパスでも正しく処理される:

C:\users\public\music
C:\users\public\music\desktop.ini
C:\users\public\music\Kayo
C:\users\public\music\Kayo\ONE LOVE, ONE GUITAR II
C:\users\public\music\Kayo\ONE LOVE, ONE GUITAR II\01-風に・・・.wma
C:\users\public\music\Kayo\ONE LOVE, ONE GUITAR II\02-リセット.wma
C:\users\public\music\Kayo\ONE LOVE, ONE GUITAR II\03-タバコの歌.wma
C:\users\public\music\Kayo\ONE LOVE, ONE GUITAR II\04-Baby.wma
C:\users\public\music\Kayo\ONE LOVE, ONE GUITAR II\05-フレンズ.wma
C:\users\public\music\Kayo\ONE LOVE, ONE GUITAR II\06-胸キュン.wma
C:\users\public\music\Kayo\ONE LOVE, ONE GUITAR II\07-Kayoのテーマ.wma

紫色でマークしてある部分はFile::Nextのメソッド。使い方は次のようになる。

  • everything --- ファイルおよびフォルダを一覧
  • files  --- ファイルのみを一覧
  • dirs --- フォルダのみを一覧

緑色でマークしてある部分が一覧を取得するパスになる。

黄色でマークしてある部分はWindowsで日本語を扱うのに必要な記述。Windowsのファイルシステムから渡される文字列Shift-JISであるため、UTF8に変換している。少々面倒だが、誤動作や文字化けを防ぐためにはこのほうがいい。詳しくは、下記の記事を参照:

Perl 5.8.X で日本語処理をする - http://hardsoft.at.webry.info/200505/article_5.html

便利なモジュールだが注意点もある。

特殊なアクセス権のファイルやフォルダの一覧を取得しようとすると次のようなエラーになる

C:\users\public\documents\My Music: Invalid argument at C:/Perl/lib/File/Next.pm line 217.

これは、Windows XPと互換性を保つために存在するMy Musicにアクセスした場合などに発生する。

ユーザーのフォルダの中にあるファイルやフォルダの一覧を取得する場合はともかく、システム関連のファイルを列挙する場合は今まで通り、File::Findを使ったほうがいいかもしれない。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
PerlはglobよりもFile::Nextでファイル一覧 ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる