1 my $dir = "D:\\My_Work\\Temp"; 2 my @files = (); 3 4 #获取给定目录下文件 5 @files = get_dir_files($dir); 6 7 #获取给定目录以及子目录下文件 8 @files = get_dir_files_x($dir); 9 10 #获取目录下以及子目录下文件,返回的结果中包含路径 11 sub get_dir_files_x{ 12 my ($dir_p) = @_; 13 my @files = (); 14 my @dirs = ($dir_p); 15 die "error $basedir: $!" unless(-d $dir_p); 16 while(@dirs){ 17 $dir = $dirs[0]; 18 opendir folder, $dir || die "Can not open this directory"; 19 my @filelist = readdir folder; 20 closedir folder; 21 foreach (@filelist) { 22 next if ($_ eq "." or $_ eq ".."); 23 my $f = path_join($dir,$_); 24 push(@dirs,$f) if (-d $f); 25 push(@files,$f) if (-f $f); 26 } 27 shift(@dirs); 28 } 29 return @files; 30 } 31 32 #获取目录下文件 33 sub get_dir_files{ 34 my ($dir) = @_; 35 my @files = (); 36 opendir DIR,$dir or die "Can not open this dir"; 37 my @file_list = readdir DIR; 38 closedir DIR; 39 foreach(@file_list) { 40 push(@files,$_) if(-f path_join($dir,$_)); 41 } 42 return @files; 43 } 44 45 #获取路径合并操作,自动加上斜杠,有斜杠与没斜杠都可以合并 46 sub path_join{ 47 my ($path1,$path2) = @_; 48 my $path = $path1."\\".$path2; 49 $path=~s/[\\|\/]+/\\/g; 50 return $path; 51 }