ルビで安全な結合パス名を作成するにはどうすればよいですか?


188

私のRails開発環境はWindowsベースで、本番環境はLinuxベースです。

VirtualHostが使用される可能性があります。で/publicフォルダ内で1つのファイル名を参照する必要があると仮定しますFile.open('/tmp/abc.txt', 'r')

-しかし、WindowsではそうなりますC:\tmp\abc.txt。2つの異なる環境を処理するために正しいパス結合をどのように実行できますか?

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

両方のケースを処理する正しい方法は何ですか?

回答:


329

File.joinの使用をお勧めします

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

51

注意すべきことが1つあります。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.