2015-11-25 28 views
0

在Windows操作系統中,反斜槓\用於文件路徑(c:\mytext.txt)。在linux/unix OS中,在文件路徑(/home/mytext.txt)中使用正斜槓/。給定一個目錄路徑file_dirfile_name,如何爲操作系統找到合適的slash並組裝文件路徑(操作系統可以是Windows或Linux)? file_dir + '/' + file namefile_dir + '\' + file_name?斜線的任何逃生?如何在ruby中選擇斜槓和組裝文件路徑?

回答

2

IO documentation

如果可能,Ruby將在不同操作系統約定之間轉換路徑名。例如,在Windows系統上,文件名「/gumby/ruby/test.rb」將打開爲「\ gumby \ ruby​​ \ test.rb」。當一個Ruby字符串,指定一個Windows風格的文件名,還記得逃離反斜槓:

"c:\\gumby\\ruby\\test.rb" 

所以,不要讓更多的工作,爲自己。爲了清晰起見,使用正斜槓並去除斜牙籤綜合徵字符串。

如果需要知道使用什麼路徑分隔符,總是有File::ALT_SEPARATOR但它搞亂或編寫代碼訪問它,而不是直接讓紅寶石做的是很少需要正確的事情。所有File方法都已經加入並拆分了榮譽File::ALT_SEPARATOR

File :: ALT_SEPARATOR可用於獲取平臺特定的分隔符。

+0

'在Ruby字符串中指定Windows風格的文件名時,請記住要避免反斜槓:'我們的開發是Windows,託管是ubuntu。是'file_path.gsub('\','\\')'去做這項工作嗎?如果我們必須找出路徑是Windows風格還是添加了反斜槓,這會有點痛苦。 – user938363

+0

你總是可以使用單引號,即'path ='C:\ gumby \ ruby​​ \ test.rb'來避免任何轉義。 – ptierno

7

使用File.join這是與操作系統無關:

File.join("my", "dir", "and", "my", "file") 
#=> my\dir\and\my\file for Windows 
#=> my/dir/and/my/file for unix 
+0

併爲多平臺開發做好準備! :) –

+0

File.join總是從根啓動,如果文件沒有保存在web根目錄下,則可能不正確。 – user938363

+0

@ user938363你可以使用'File.expand_path'來創建相對路徑。另外它的問題只是關於斜槓;) – fl00r

1

紅寶石使用/爲Windows和Unix系統的路徑分隔符:

PS C:\Users\Administrator> irb 
irb(main):001:0> Dir.pwd 
=> "C:/Users/Administrator" 
irb(main):002:0> File.join(Dir.pwd,'testing.txt') 
=> "C:/Users/Administrator/testing.txt" 
irb(main):003:0> File.read(File.join(Dir.pwd,'testing.txt')) 
=> "foo bar" 

所以如果你真的想用一個字符串即可做這樣的事情以及:

irb(main):004:0> File.read('C:/Users/Administrator/testing.txt') 
=> "foo bar" 
相關問題