8

によって返されたリストからの順序を保証する方法はあります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 のクイック検索で解決策がたくさんあることがわかりましたが、必要な正確な順序が見つかりません。基本的に、フォルダーをファイル間ではなく、最初または最後に表示する必要があります。

たとえば、現在、フォルダー構造がある場合:

folder
folder
file1
file2
file3

私は結果を得る:

file2
folder
folder
file1
file3

本当に欲しいとき:

folder
folder
file1
file2
file3

または:

file1
file2
file3
folder
folder

これを達成する方法はありますか?

4

4 に答える 4

5

foreach (sort readdir $dh) {}私にとってはうまくいきます。

例えば:

opendir (my $DIR, "$dir") || die "Error while opening $dir: $!\n";

foreach my $dirFileName(sort readdir $DIR)
{
      next if $dirFileName eq '.' or $dirFileName eq '..';
      print("fileName: $dirFileName ... \n");
}
于 2015-03-19T13:18:29.037 に答える
5

sortによって返されたリストの各エントリを調べることで、それを行うためにa を使用できますreaddir

opendir(my $DIR, '.') or die "Error opening ";

foreach my $file (sort { -d $a <=> -d $b } readdir($DIR)) {
  print "$file\n";
}

これにより、フォルダーが最後になります。

于 2013-05-28T13:26:05.880 に答える