2009-02-28 9 views
134

My Rails開発環境はWindowsベースで、本番環境はLinuxベースです。ruby​​で安全な結合パス名を実行する方法は?

VirtualHostが使用される可能性があります。 /publicフォルダーで参照する必要があるファイル名は、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

を取得するときに、両方のケースを処理するための正しい方法は何ですか?

答えて

258

は私が注意することがFile.join

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

一つを使用することをお勧めします。 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 
関連する問題