В настоящее время я пытаюсь получить размеры всех файлов в списке каталогов (игнорируя любые подкаталоги).Я использую операции opendir
и readdir
, и для каждого файла я вывожу имя и размер в файл.Имя файла выводится правильно, но не размер.Я пробовал это, используя оператор -s
и встроенную функцию stat, но с обоими я получаю предупреждение, что значение неинициализировано.
Мой код:
#!/usr/bin/perl
use strict;
use warnings;
my $dir = $ARGV[0];
opendir(DIR, $dir) or die "Could not open directory '$dir' $!";
my $filename = 'FileSize.txt';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
while (my $file = readdir(DIR)) {
# Ignore Sub-Directories
next unless (-f "$dir/$file");
my $size = -s $file;
print $fh "$file"," ","$size\n";
}
closedir(DIR);
exit 0;
Iвыполните команду из самого каталога верхнего уровня, включая имя проверяемого подкаталога, и получите следующую ошибку, по одному на каждый файл в подкаталоге, который обрабатывается
C:\Users\lafarnum\Documents>perl FileComp.pl DiskImage
Use of uninitialized value $size in concatenation (.) or string at
FileComp.pl line 18.
Следовательно, имена файлов правильно выводятся в выходной файл, но не размеры файлов.Выходной файл выглядит следующим образом
BuildState.txt
data1.cab
data1.hdr
data2.cab
ISSetup.dll
layout.bin
README.doc
setup.bmp
setup.exe
setup.ini
setup.inx
setup.iss
vcredist_x86.exe
_Setup.dll
Я думаю, это как-то связано с тем, как я получаю переменную файла из readdir
.Все примеры использования оператора -s
и встроенной функции stat были, когда пользователи жестко закодировали имена файлов, а не извлекли их, используя readdir
.Я новичок в использовании Perl, поэтому прошу прощения, если я делаю основную ошибку.