如何在Windows上获取Perl中目录的上次修改时间?

时间:2010-04-16 22:56:29

标签: windows perl directory stat

在Perl中(在Windows上)如何确定目录的上次修改时间?

注意:

 opendir my($dirHandle), "$path";
 my $modtime = (stat($dirHandle))[9];

导致以下错误:

  

dirfd函数未在scriptName.pl line lineNumber。

中实现

3 个答案:

答案 0 :(得分:3)

使用CPAN上的Win32::UTCFileTime模块,它反映了built-in stat function的界面:

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

答案 1 :(得分:3)

显然,真正的答案只是在目录路径上调用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最终耗尽内存并执行暂停。无论哪种方式都有上面的答案。

答案 2 :(得分:3)

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