Почему Ruby, кажется, обращается к файлам в каталоге случайно? - PullRequest
6 голосов
/ 03 апреля 2011

Это по замыслу?

Вот код:

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.

enter image description here

Это дизайн?Мне просто любопытно.

1 Ответ

15 голосов
/ 03 апреля 2011

Порядок должен быть одинаковым каждый раз в конкретной ОС, однако отличается в разных операционных системах.

На поведение или Dir.glob нельзя полагаться как нато же самое в разных ОС.Не уверен, что это так, а скорее как артефакт файловых систем.

В Windows и Linux результаты сортируются по иерархии, а затем по алфавиту;В Mac OS X результаты сортируются в алфавитном порядке.

Вы можете смягчить эффект, вызвав сортировку своих результатов, например:

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

или, если вы хотите, чтобы регистр не учитывался, возможно:

 files = Dir.glob("./*").sort {|a,b| a.upcase <=> b.upcase}
...