Как я могу получить время последнего изменения каталога в Perl в Windows? - PullRequest
4 голосов
/ 17 апреля 2010

В Perl (в Windows), как определить время последнего изменения каталога?

Примечание:

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

приводит к следующей ошибке:

Функция dirfd не реализована в строке scriptName.pl lineNumber.

Ответы [ 3 ]

3 голосов
/ 17 апреля 2010

По-видимому, реальный ответ - просто вызов статистики на пути к каталогу (а не на дескрипторе каталога, как вы могли бы поверить во многих примерах) (по крайней мере, для окон).

пример:

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

если вы хотите преобразовать его в местное время, вы можете сделать:

my $modifiedTime = localtime $stats[9];

если вы хотите сделать все это в одну строку, вы можете сделать:

my $modifiedTime = localtime((stat("C:\\Windows"))[9]);

Кстати, Perl-модуль Win32 UTCFileTime имеет синтаксическую ошибку, которая препятствует правильной интерпретации / компиляции модуля perl. Это означает, что когда он включен в скрипт perl, этот скрипт также не будет работать должным образом. Когда я объединяю весь реальный код, который что-то делает с моим скриптом, и повторяю его, Perl в конце концов исчерпывает память и выполнение останавливается. В любом случае ответ выше.

3 голосов
/ 17 апреля 2010
 my $dir_path = "path_of_your_directory";
 my $mod_time =  ( stat ( $dir_path ) )[9];
3 голосов
/ 17 апреля 2010

Используйте модуль Win32 :: UTCFileTime на CPAN, который отражает встроенную функцию stat * Интерфейс :

use Win32::UTCFileTime qw(:DEFAULT $ErrStr);
@stats = stat $file or die "stat() failed: $ErrStr\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...