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

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

所以你需要 open"$outputFilePath/$files"而不是$files.

请注意,它stat适用于文件名以及(甚至优于)文件句柄。因此,您只需调用stat文件名即可省去打开和关闭文件句柄的麻烦。

于 2013-02-01T23:47:23.753 回答
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 回答