Jak mówili inni, Dir.foreach
jest dobrym rozwiązaniem tutaj. Należy jednak pamiętać, że Dir.entries
i Dir.foreach
zawsze będą wyświetlać .
i ..
(katalogi bieżące i macierzyste). Generalnie nie chcą pracować na nich, więc można zrobić coś takiego:
Dir.foreach('/path/to/dir') do |item|
next if item == '.' or item == '..'
# do work on real items
end
Dir.foreach
i Dir.entries
pokazują również wszystkie pozycje w katalogu - ukryte i nie ukryte podobni. Często tego właśnie chcesz, ale jeśli nie, musisz zrobić coś, aby pominąć ukryte pliki i katalogi.
Alternatywnie, można zajrzeć do Dir.glob
który zapewnia proste dopasowanie wieloznaczny:
Dir.glob('/path/to/dir/*.rb') do |rb_file|
# do work on files ending in .rb in the desired directory
end
Czy możesz określić, co się stało, gdy próbowałeś to zrobić? Jaki dokładnie kod próbowałeś (lub odpowiedni fragment, jeśli jest długi)? Jakie komunikaty o błędach dostałeś? 'Dir.foreach' działa w celu iteracji zawartości katalogu, więc dzieje się coś innego. – Telemachus
Jeśli chcesz tylko pliki w twoim katalogu, nie zapomnij przetestować plików podczas iteracji nad zawartością katalogu: 'do_something_with (entry) if File.file? (Entry)' –
Użyj ''img/*. {Jpg, png, gif, jpeg} ", aby pobrać wiele rozszerzeń. –