Я пытаюсь прочитать файлы в папке в Perl, используя Directory Handle. Сценарий может отображать имя файла, но выдает две ошибки: readdir() attempted on invalid dirhandle DIR
и closedir() attempted on invalid dirhandle DIR
.
Я вызываю подпрограмму и передаю два значения:
if($fileEnding eq "directory")
{
print "$fileName is a directory\n";
FolderInvestigator1($a, $fileName);
}
$a
содержит имя каталога и его путь, который передается через аргумент командной строки. Я передаю управление подпрограмме.
Ниже мой код: -
sub FolderInvestigator1
{
my $prevPath = shift;
my $receivedFolder = shift;
my $realPath = "$prevPath/$receivedFolder";
my $path = File::Spec->rel2abs($realPath);
print "$path\n";
print "$receivedFolder Folder Received\n";
opendir(DIR, $path) or die "You've Passed Invalid Directory as Arguments\n";
while(my $fileName = readdir DIR)
{
next if $fileName =~ /^\./;
print "The Vacant Folder has $fileName file\n";
}
closedir(DIR);
}
Вот мой полный код: -
FirstResponder();
sub FirstResponder
{
if (@ARGV == 0)
{
print "No Arguments Passed\n";
}
else
{
foreach my $a(@ARGV)
{
print "Investigating $a directory below:-\n";
opendir(DIR, $a) or die "You've Passed Invalid Directory as Arguments\n";
while(my $fileName = readdir DIR)
{
next if $fileName =~ /^\./;
$ending = `file --mime-type $a/$fileName`;
#print $ending;
$fileEnding = `basename -s $ending`;
#print $fileEnding;
chomp($fileEnding);
#print $fileName,"\n";
if($fileEnding eq "directory")
{
print "$fileName is a directory\n";
FolderInvestigator1($a, $fileName);
}
else
{
CureExtensions($a, $fileName);
}
}
closedir(DIR);
my @files = glob("$a/*");
my $size = @files;
if($size == 0)
{
print "The $a is an empty directory\n";
}
}
}#Foreach Ends Here..
}
Пожалуйста, смотрите скриншот для получения дополнительной информации о том, что происходит!
Я не могу понять, почему Directory Handle выдает ошибку, хотя Я сделал правильный путь. Некоторые рекомендации будут высоко оценены.