루비에서 안전한 조인 경로 이름을 만드는 방법은 무엇입니까?


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

한가지주의 할 점. 루비는 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.