Я пытался использовать Perl's File: Найти рекурсивно найти все файлы на моем системном диске Windows. К сожалению, это ошибка во время выполнения до очень длинного пути к файлу. Я хотел бы знать, как обращаться с этим так, чтобы мой скрипт мог продолжать работать и сообщить мне, какие пути он должен был пропустить. В настоящее время я могу только считать файлы до тех пор, пока не встретит путь, который ему не нравится, после чего он останавливается.Как обращаться с файлом :: Найти в Windows с длинными путями
Что я основывая этот офф: http://www.perlmonks.org/?node_id=217166 Я нашел следующую статью, которая аналогичная проблема, но я не в состоянии применить его: http://www.perlmonks.org/?node_id=933849
#/usr/bin/perl
use strict;
use File::Find;
my $superFileCount = 0;
# first try find(\&print_name_if_dir, no_chdir=>1, ".");
# second try
eval {
find(\&print_name, no_chdir=>1, ".")
}; warn [email protected] if [email protected];
# end of second try
sub print_name
{
$superFileCount++;
}
print "all files found: $superFileCount \n";
Первый запуск:
Can't cd to ../../../../../../../../../.. from ./Users/username/AppData/Roaming/
Macromedia/Flash Player/#SharedObjects/8Z5RPFSR/foxnewsplayer-a.akamaihd.net/[[I
MPORT]]/players.edgesuite.net/flash/plugins/osmf/advanced-streaming-plugin/v3.6/
osmf2.0/AkamaiAdvancedStreamingPlugin.swf: No such file or directory at C:/Straw
berryPerl/perl/lib/File/Find.pm line 812.
Если я оберну его в eval, я получаю частичный файл, но он намного ниже, чем на самом деле на диске:
Can't cd to ../../../../../../../../../.. from ./Users/username/AppData/Roaming/
Macromedia/Flash Player/#SharedObjects/8Z5RPFSR/foxnewsplayer-a.akamaihd.net/[[I
MPORT]]/players.edgesuite.net/flash/plugins/osmf/advanced-streaming-plugin/v3.6/
osmf2.0/AkamaiAdvancedStreamingPlugin.swf: No such file or directory at C:/Straw
berryPerl/perl/lib/File/Find.pm line 812.
all files found: 84730
Ваш скрипт отлично подходит для меня. Тем не менее, я запускаю Cygwin. – xxfelixxx
Это может изменить ситуацию, я использую Strawberry Perl. Возможно, Cygwin обрабатывает путь по-разному. Я надеюсь, что есть способ более эффективно управлять ошибкой. – ColdSoda