![]() |
![]() |
![]() |
![]() |
管理運営:有限会社ミスティーネット |
|||
| HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問合せ | ミスティーネット | リンク集 | | |||
![]() |
![]()
![]()
![]()
|
HOME >> ディレクトリの処理
■ ディレクトリの作成
ディレクトリの作成には、mkdir 関数を使います。 → mkdir 関数のリファレンス 【書式】
if ( mkdir "directory" ) { print "ディレクトリの作成に成功しました。"; } else { print "ディレクトリの作成に失敗しました。"; } ■ カレントディレクトリの移動
カレントディレクトリの移動には、chdir 関数を使います。 → chdir 関数のリファレンス 【書式】
if ( chdir "./directory" ) { print "カレントディレクトリの移動に成功しました。"; } else { print "カレントディレクトリの移動に失敗しました。"; } ■ ディレクトリの削除
ディレクトリの削除には、rmdir 関数を使います。 → rmdir 関数のリファレンス 【書式】
if ( rmdir "./directory" ) {
削除対象のディレクトリ内にファイルが残っている場合には、削除は失敗します。print "ディレクトリの削除に成功しました。"; } else { print "ディレクトリの削除に失敗しました。"; } ファイルを含むディレクトリの場合には、ファイルを削除した後にディレクトリを削除するよう 処理を行なう必要があります。 [ディレクトリ内にファイルが残っている場合の処理方法]
$dir = "./directory/"; ← 削除するディレクトリを変数にセットする opendir DIR, $dir; @files = grep { !m/^(\.|\.\.)$/g } readdir DIR; ← 「.」 「..」 以外のファイルを取得 close DIR; $flag = @files; ← ディレクトリ内のファイルの個数を求める if ( $flag ) { ← ファイルがみつかった場合のみファイルの削除処理を行なう foreach $file ( @files ) { unlink "$dir$file"; } } rmdir $dir; ← ディレクトリの削除 ■ ディレクトリの読み込み
ディレクトリ内のファイルを読みこむ場合には、opendir 関数を使ってディレクトリを開き、ディレクトリハンドルを取得します。
このディレクトリハンドルを使って、readdir 関数からディレクトリ内のファイルを読み込みます。
ファイルの読み込みが終了したら、 closedir 関数を使ってディレクトリを閉じます。 → opendir 関数のリファレンス → readdir 関数のリファレンス → closedir 関数のリファレンス ![]() ファイルの読み込みを行なう場合には opendir 関数で、ディレクトリを一旦開き、readdir 関数でディレクトリ内の要素を読み込みます。 読み込み処理が終了したら、closedir 関数でディレクトリを閉じます。 【書式】
open DIR "temp"; ← temp ディレクトリをオープンします
ディレクトリハンドル名には半角英数字が使えます(全角文字は指定できません)。@files = readdir DIR; ← ディレクトリハンドルから配列にデータを読み込みます close DIR; ← temp ディレクトリをクローズします ディレクトリ名の指定には変数を使うことも可能です。 指定されたディレクトリが存在しない場合には、エラーとなります。 ディレクトリ要素を取得した場合には、「. (現在のディレクトリ)」 や 「.. (一つ上のディレクトリ)」 も取得されます。 ファイルのみを取得したい場合には下記の方法でファイルを取得してください。
open DIR "temp";
ここでは、map 関数とファイルテスト演算子・条件演算子を使って、ファイルのみを取り出しています。
@files = map { -f "temp/$_" ? $_ : '' } readdir DIR; ← ファイルのみ取得 close DIR; → map 関数へのリファレンス → ファイルテスト演算子について → 条件演算子を使って分岐処理を行なう ディレクトリ名を取得する場合は、ファイルテスト演算子の 「-f」 の部分を、「-d」 に代えてください。 特定の種類のファイル名を取得したい場合には、ファイルの拡張子を利用します。
open DIR "temp";
ここでは、grep 関数と正規表現を利用して、HTMLファイルのみを取り出しています。
@files = grep { /\.html$/ } readdir DIR; ← HTMLファイルのみ取得 close DIR; → grep 関数へのリファレンス → 正規表現について ディレクトリハンドルの現在の読み取り位置を取得するには、telldir 関数を使います。 【書式】この関数は、次に紹介する seekdir 関数と連携してよく使われます。 ディレクトリハンドルの読み取り位置を変更するには、seekdir 関数を使います。 【書式】
opendir DIR, "./directory";
$position = telldir DIR; seekdir DIR, $position; ・・・ close DIR;
|