在Perl中使用Stat()获取文件的DateModifed - 不适当的I / O控制操作

时间:2013-02-01 23:18:29

标签: perl stat

我试图读取文件的日期修改值,但我无法这样做。我不断接收"不适当的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);

2 个答案:

答案 0 :(得分:0)

readdir生成正在读取的目录中的文件名列表,即没有任何路径信息。

因此,您需要打开"$outputFilePath/$files"而不是$files

请注意,stat适用于文件名以及(甚至更好)文件句柄。所以你可以在文件名上调用stat并省去打开和关闭文件句柄的麻烦。

答案 1 :(得分:0)

以下,使用fileglob operator获取目录中的文件列表,可能会对您有所帮助:

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

希望这有帮助!