6

これは設計によるものですか?

コードは次のとおりです。

class FileRenamer
    def RenameFiles(folder_path)    
        files = Dir.glob(folder_path + "/*")
    end
end

puts "Renaming files..."

renamer = FileRenamer.new()
files = renamer.RenameFiles("/home/papuccino1/Desktop/Test")
puts files

puts "Renaming complete."

Nautilus で表示されるファイルではなく、ランダムな順序でファイルを取得しているようです。

ここに画像の説明を入力

これは設計によるものですか?私はただ興味があります。

4

2 に答える 2

14

順序は、特定の OS では毎回同じである必要がありますが、オペレーティングシステムによって異なります。

動作または Dir.glob が異なる OS 間で同じであることに依存することはできません。これが設計によるものかどうかはわかりませんが、ファイルシステムのアーティファクトです。

Windows および Linux では、結果は階層別にソートされ、次にアルファベット順にソートされます。Mac OS X では、結果はアルファベット順にソートされます。

結果に対して sort を呼び出すことで、影響を軽減できます。

files = Dir.glob("./*").sort

または、大文字と小文字を区別しない場合は、おそらく次のようになります。

 files = Dir.glob("./*").sort {|a,b| a.upcase <=> b.upcase}
于 2011-04-03T13:51:12.127 に答える
2

スコットからの答えは古くなっています。Mac OS 10.15.6 Catalina で Dir.glob を実行しましたが、ファイルがアルファベット順に返されませんでした。ruby のドキュメントによると、順序は OS によって決定されます。

https://ruby-doc.org/core-2.5.1/Dir.html

パターンは正規表現ではなく、シェル グロブに近いことに注意してください。flags パラメータの意味については、File.fnmatch を参照してください。大文字と小文字の区別は、結果が返される順序と同様に、システムによって異なります (File::FNM_CASEFOLD は無視されます)。

于 2020-08-12T12:56:51.227 に答える