seekdir

ディレクトリポインタの位置を再設定する

構文

解説

seekdir は、DIRHANDLE 上での readdir ルーチンの現在位置を POS にセットします。 POS の値は、必ず telldir から得られた値を使ってください。 なぜなら、現在位置を表す値は OS 環境によって異なるためです。そのあたりの詳細は telldir の解説をご覧ください。

次のコードは、事前にディレクトリ内のエントリをすべて読み取って test2.txt の位置を取得しておきます。 その後、test2.txt の位置に現在位置を変更し、再度、test2.txt を読み取ってみます。

# ディレクトリを開く
opendir my $dh, './sample';

# ディレクトリを読み取って test2.txt の位置を特定
my $target_pos  = 0;
my $current_pos = 0;
while ( my $file = readdir $dh ) {
    if ( $file eq 'test2.txt' ) {
        $target_pos = $current_pos;
    }
    $current_pos = telldir $dh;
}

# test2.txt の位置にディレクトリポインタを移動
seekdir $dh, $target_pos;

# 現在のディレクトリポインタが指しているエントリを読み取る
print readdir $dh, "\n";    # test2.txt