4

在 Perl(在 Windows 上)中,我如何确定目录的最后修改时间?

笔记:

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

导致以下错误:

dirfd 函数在 scriptName.pl line lineNumber 处未实现。

4

3 回答 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 最终会耗尽内存并停止执行。无论哪种方式,上面都有答案。

于 2010-04-17T00:22:03.037 回答
4
 my $dir_path = "path_of_your_directory";
 my $mod_time =  ( stat ( $dir_path ) )[9];
于 2010-04-17T00:31:00.227 回答
3

在 CPAN 上使用Win32::UTCFileTime模块,它反映了内置 stat 函数的接口:

use Win32::UTCFileTime qw(:DEFAULT $ErrStr);
@stats = stat $file or die "stat() failed: $ErrStr\n";
于 2010-04-16T22:59:17.810 回答