Як зробити безпечне ім'я шляху приєднання в рубіні?


189

Моє середовище розробки Rails базується на Windows, а моє виробниче середовище - на базі Linux.

Цілком можливо, що буде використаний VirtualHost. Припустимо, що одне ім’я файлу потрібно посилатись у /publicпапці з File.open('/tmp/abc.txt', 'r').

—Але в Windows має бути C:\tmp\abc.txt. Як я можу зробити правильний шлях з'єднання для обробки двох різних середовищ?

prefix_tmp_path = '/tmp/'
filename = "/#{rand(10)}.txt"

fullname = prefix_tmp_path + filename # /tmp//1.txt <- but I don't want a double //

І коли prefix_tmp_path = "C:\tmp\"я отримуюC:\tmp\/1.txt

Який правильний спосіб вирішити обидва випадки?

Відповіді:


330

Я рекомендую використовувати File.join

>> File.join("path", "to", "join")
=> "path/to/join"

51

Одне зауваження. Ruby використовує "/" для розділення файлів на всіх платформах, включаючи Windows, тому вам фактично не потрібно використовувати інший код для об'єднання речей на різних платформах. "C: /tmp/1.text" має працювати нормально.

File.join () - ваш друг для об'єднання шляхів разом.

prefix_tmp_path = 'C:/tmp'
filename = "#{rand(10)}.txt"
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.