วิธีทำชื่อเข้าร่วมที่ปลอดภัยในทับทิม?


189

สภาพแวดล้อมการพัฒนาของฉัน Rails นั้นใช้ Windows และสภาพแวดล้อมการผลิตของฉันนั้นใช้ Linux

เป็นไปได้ว่าจะใช้ VirtualHost สมมติว่าชื่อไฟล์หนึ่งจะต้องมีการอ้างอิงในโฟลเดอร์ที่มี/publicFile.open('/tmp/abc.txt', 'r')

-but ใน 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

วิธีที่ถูกต้องในการจัดการทั้งสองกรณีคืออะไร?

คำตอบ:



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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.