Làm thế nào để làm một tên tham gia an toàn trong ruby?


188

Môi trường phát triển Rails của tôi dựa trên Windows và môi trường sản xuất của tôi dựa trên Linux.

Có thể Virtualhost sẽ được sử dụng. Giả sử rằng một tên tệp cần được tham chiếu trong /publicthư mục với File.open('/tmp/abc.txt', 'r').

Nên sử dụng Windowsbut trong Windows C:\tmp\abc.txt. Làm thế nào tôi có thể thực hiện một đường dẫn chính xác tham gia để xử lý hai môi trường khác nhau?

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

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

Và khi prefix_tmp_path = "C:\tmp\"tôi nhận đượcC:\tmp\/1.txt

Cách chính xác để xử lý cả hai trường hợp là gì?

Câu trả lời:


329

Tôi khuyên bạn nên sử dụng File.join

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

51

Một điều cần lưu ý. Ruby sử dụng "/" cho trình phân tách tệp trên tất cả các nền tảng, bao gồm cả Windows, vì vậy bạn thực sự không cần sử dụng mã khác nhau để kết hợp mọi thứ với nhau trên các nền tảng khác nhau. "C: /tmp/1.text" sẽ hoạt động tốt.

File.join () là bạn của bạn để nối các đường dẫn với nhau.

prefix_tmp_path = 'C:/tmp'
filename = "#{rand(10)}.txt"
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.