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