有什么方法可以保证readdir
返回的列表中的订单吗?
我有代码:
opendir(my $DIR, $src) or die "Error opening $src";
# Loop for each file in the directory
while (my $file = readdir($DIR))
{
print "$file\n";
}
但是它以随机顺序返回。现在,我知道可以通过Google进行快速搜索找到许多解决方案,但是我找不到所需的确切顺序。
基本上,我希望文件夹显示为FIRST或LAST,而不是在文件之间。
例如,现在如果我具有文件夹结构:
folder
folder
file1
file2
file3
我得到结果:
file2
folder
folder
file1
file3
当我真正想要的时候:
folder
folder
file1
file2
file3
或者:
file1
file2
file3
folder
folder
有什么办法可以做到这一点?
最佳答案
您可以先放置文件夹,然后再按文件/目录名称进行排序,
# $src pointing to folder open with opendir
my @sorted_dir =
map $_->[0],
sort {
$a->[1] <=> $b->[1]
||
$a->[0] cmp $b->[0]
}
map [ $_, -f "$src/$_" ],
readdir($DIR);
虽然可以达到类似的效果,
for my $file (sort { -f "$src/$a" <=> -f "$src/$b" } readdir($DIR)) {
print "$file\n";
}
它较慢且效率低下,因为它更多地用于文件系统检查目录条目是否为纯文件。
关于Perl readdir按顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16793043/