Ruby'de güvenli birleştirme yol adı nasıl yapılır?


189

My Rails geliştirme ortamı Windows tabanlı ve üretim ortamım Linux tabanlı.

VirtualHost'un kullanılması mümkündür. /publicKlasöründe bir dosya adına başvurulması gerektiğini varsayın File.open('/tmp/abc.txt', 'r').

- ama Windows'da olmalı C:\tmp\abc.txt. İki farklı ortamı işlemek için doğru bir yol birleştirmeyi nasıl yapabilirim?

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

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

Ve ne zaman prefix_tmp_path = "C:\tmp\"alırımC:\tmp\/1.txt

Her iki durumu da ele almanın doğru yolu nedir?

Yanıtlar:


330

File.join kullanmanızı öneririm

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

51

Dikkat edilmesi gereken bir şey var. Ruby, Windows dahil tüm platformlarda dosya ayırıcı için bir "/" kullanır, bu nedenle, şeyleri farklı platformlarda birleştirmek için aslında farklı kodlar kullanmanıza gerek yoktur. "C: /tmp/1.text" düzgün çalışmalıdır.

File.join () , yollara birlikte katılmanız için arkadaşınızdır.

prefix_tmp_path = 'C:/tmp'
filename = "#{rand(10)}.txt"
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.