如何在Windows上使用Perl获取目录的最后修改时间?

4
在Perl(在Windows上),如何确定目录的最后修改时间?
注意:
 opendir my($dirHandle), "$path";
 my $modtime = (stat($dirHandle))[9];

导致以下错误:

dirfd函数在scriptName.pl的第lineNumber行未实现。


(注:此处的“scriptName.pl”和“lineNumber”应替换为具体的脚本文件名和行号)
3个回答

4

显然,真正的答案是调用目录路径上的stat函数(不是许多示例所说的目录句柄)(至少对于Windows系统而言)。

例如:

my $directory = "C:\\windows";
my @stats = stat $directory;
my $modifiedTime = $stats[9];

如果您想将其转换为本地时间,可以执行以下操作:
my $modifiedTime = localtime $stats[9];

如果想要在一行中完成所有操作,可以这样做:
my $modifiedTime = localtime((stat("C:\\Windows"))[9]);

顺便提一下,Win32 UTCFileTime的Perl模块存在语法错误,这会导致无法正确解释/编译Perl模块。这意味着当它被包含在Perl脚本中时,该脚本也无法正常工作。当我将所有真正执行操作的代码合并到我的脚本中并重试它时,Perl最终会耗尽内存并停止执行。无论如何,以上就是答案。


你是否在CPAN上报告了这个问题的错误? - Ether

4
 my $dir_path = "path_of_your_directory";
 my $mod_time =  ( stat ( $dir_path ) )[9];

3

使用CPAN上的Win32::UTCFileTime模块,它与内置的stat函数具有相同的接口:

use Win32::UTCFileTime qw(:DEFAULT $ErrStr);
@stats = stat $file or die "stat() failed: $ErrStr\n";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接