0

ファイルの datemodified 値を読み取ろうとしましたが、読み取れませんでした。「不適切な I/O 制御操作」エラーが継続的に発生します。これは、私が読み取ろうとしている Windows ディレクトリ構造です。ファイル名 ($outputFilePath."/".$files) と共に完全なファイル パスを stat() 関数に渡そうとしました (この場合、$! は何も返さず、プログラムは単に終了します)。結果のないファイルハンドル(下記)を使用するように。どんな助けでも大歓迎です。

chdir($outputFilePath);
opendir(my $dirHandle, $outputFilePath) or die "Cannot opendir $outputFilePath: $!";
my $files;
my $modTime; 
#print getcwd();
while($files = readdir($dirHandle)){
  if($files ne '.' && $files ne '..'){
    open(my $fileHandle, $files) or die "Cannot open $files: $!";
    $modTime = (stat($fileHandle))[9] or die "Cannot stat file $files: $!";
    print $files."-".$modTime."\n";
    close($fileHandle);
   }
}
closedir($dirHandle);
4

2 に答える 2

0

おそらく、fileglob 演算子を使用してディレクトリ内のファイルのリストを取得する次のコードが役立ちます。

use strict;
use warnings;
use File::stat;

my $outputFilePath = 'C:\Moodle\server\php';
chdir $outputFilePath;

print "$_-" . stat($_)->mtime . "\n" for <*>;

部分的な出力:

cfg-1292006858
data-1324925198
DB-1324925198
debugclient-0.9.0.exe-1198234832
...
tmp-1292006858
www-1292006858
xdebug.txt-1198234860
zendOptimizer-1324925193

最後の行:

print "$_-" . stat($_)->mtime . "\n" for <*>;
        ^       ^         ^              ^^
        |       |         |              ||
        |       |         |              |+ - All files ( use <*.txt> to get only text files )
        |       |         |              + - glob angle-bracket operator generates list of file names in dir
        |       |         + - Get modification time
        |       + - Stat on file
        + - File name

お役に立てれば!

于 2013-02-02T07:10:07.957 に答える
0

readdir読み取り中のディレクトリ内のファイル名のリストを生成します。つまり、パス情報はありません。

"$outputFilePath/$files"そのため、代わりに開く必要があります$files

statファイルハンドルと同様に(またはそれ以上に)ファイル名で機能することに注意してください。したがって、ファイル名を呼び出すだけstatで、ファイルハンドルを開いたり閉じたりする手間を省くことができます。

于 2013-02-01T23:47:23.753 に答える