2011-10-16 96 views
0

我試過File::Find::Rule,但沒有發現任何包含類似字符的文件名: בר רפאלי爲Unicode文件名的Perl遞歸文件搜索

任何想法?

use File::Find::Rule; 
use Win32::Shortcut; 
use Spreadsheet::WriteExcel; 

my $workbook = Spreadsheet::WriteExcel->new('status.xls'); 

my $worksheet = $workbook->add_worksheet(); 


my $base_dir ='E:/files/'; 

my $find_rule = File::Find::Rule->new; 

#$find_rule->maxdepth(1); 

$find_rule->name('*.lnk'); 

my @files = $find_rule->in($base_dir); 

print scalar(@files)."\n"; 

#print join("\n", @files); 
+0

它們將根據您的語言環境的編碼進行編碼。在Windows上,可能會遇到不能按照區域設置進行編碼的文件名。我敢打賭,這是通過返回文件的簡稱來處理? – ikegami

+0

它跳過文件,它根本不顯示它。 – Nick

+2

讓我們顯示您的搜索條件 –

回答

0

我沒有辦法進行測試(Linux的,沒有太多的Unicode知識等),它可能是低效的,但也許它會在「只把它實物進行的方式工作。你可以用我的File::chdir::WalkDir並使用每個文件的回調,增加了文件名列表:

#!/usr/bin/env perl 

use strict; 
use warnings; 

use File::chdir::WalkDir; 
use File::Spec::Functions 'catfile'; 

my $base_dir = '.'; 

my @files; 
my $callback = sub { 
    my ($file, $dir) = @_; 
    return unless ($file =~ /\.lnk$/); 

    push @files, catfile($dir, $file); 
}; 

walkdir($base_dir, $callback); 

由於這斜靠在opendir和朋友也可能是緩慢的,但只要能看到你的文件,這應該工作。試一試,讓我知道是否有問題。