Anche se non si può fare open
case insensitive è possibile scrivere la ricerca di directory che avete suggerito in maniera concisa. per esempio.
filename = Dir.glob('foo.txt', File::FNM_CASEFOLD).first
if filename
# use filename here
else
# no matching file
end
ricorda che mentre le documentation suggests that FNM_CASEFOLD can't be used with glob questo sembra non essere corretto o non aggiornate.
Alternative
Se siete preoccupati per utilizzando FNM_CASEFOLD
poi un paio di alternative sono:
filename = Dir.glob('*').find { |f| f.downcase == 'foo.txt' }
o scrivere un po 'di metodo per costruire un caso glob insensibile per un determinato nome di file:
def ci_glob(filename)
glob = ''
filename.each_char do |c|
glob += c.downcase != c.upcase ? "[#{c.downcase}#{c.upcase}]" : c
end
glob
end
irb(main):024:0> ci_glob('foo.txt')
=> "[fF][oO][oO].[tT][xX][tT]"
e allora si può fare:
filename = Dir.glob(ci_glob('foo.txt')).first
Cosa succede se più file corrispondono? Scegli uno di loro a caso? –
@ Ignacio: Sì, questa è l'unica opzione ragionevole. Ma quel caso è improbabile nella mia situazione. – imgx64