Получение DateModifed файла с помощью Stat() в Perl - Неправильная операция управления вводом / выводом
Я пытаюсь прочитать значение даты, измененное в файле, но мне не удалось это сделать. Я постоянно получаю сообщения об ошибках "Неправильная операция ввода-вывода". Это структура каталогов 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);
2 ответа
Возможно, следующее, которое использует оператор fileglob для получения списка файлов в каталоге, поможет вам:
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
Надеюсь это поможет!
readdir
создает список имен файлов в каталоге, который он читает, т.е. без какой-либо информации о пути.
Так что вам нужно открыть "$outputFilePath/$files"
вместо $files
,
Обратите внимание, что stat
работает с именами файлов, а также (или даже лучше) с файловыми дескрипторами. Так что вы можете просто позвонить stat
на имя файла и избавьте себя от необходимости открывать и закрывать файловый дескриптор.