目前我得到的路徑\\documents\videos\form.mov
,但需要在路徑更改爲/documents/videos/form.mov
。我曾嘗試使用路徑分隔符以及split
。但它不允許將路徑拆分爲'\'是一個轉義字符。轉換Windows路徑到Linux路徑
請任何人都可以在這幫助我。
目前我得到的路徑\\documents\videos\form.mov
,但需要在路徑更改爲/documents/videos/form.mov
。我曾嘗試使用路徑分隔符以及split
。但它不允許將路徑拆分爲'\'是一個轉義字符。轉換Windows路徑到Linux路徑
請任何人都可以在這幫助我。
path = '\\\\documents\videos\form.mov'
new_path = path.gsub /\\+/, '/'
puts path, new_path
輸出
\\documents\videos\form.mov
/documents/videos/form.mov
這裏是一個irb
會議
E:\Ruby\source>irb --simple-prompt
>> path = '\\\\documents\videos\form.mov'
=> "\\\\documents\\videos\\form.mov"
>> new_path = path.gsub /\\+/, '/'
=> "/documents/videos/form.mov"
>>
在這裏你已經在單引號中使用路徑...所以它會改變路徑爲'\ \\\ documents \\ videos \ form.mov'因此它很容易轉換,但在我的情況....我得到的路徑從用戶...即用戶正在進入路徑,所以他不會進入路徑單引號。當我嘗試你的路徑解決方案時,它給我的輸出爲 'path =「\\\\ documents \ videos \ form.mov」 =>「\\\\ documents \ videos \ form.mov」 2.0 .0p0:031> new_path = path.gsub/\\ +/'/' => 「/documents\videos\form.mov」 ' –
你的我的代碼版本沒有工作監守你使用雙引號。引號不會「改變路徑」。引號的選擇簡單地決定了什麼特殊的序列被翻譯,所以在雙引號中'\ n'意味着一個換行符,它在單引號內意味着兩個字符'\ n'。如果你的用戶輸入'\\ documents \ videos \ form.mov'作爲提示的輸入,那麼這正是你的字符串所包含的內容(最後有一個換行符,你需要''chomp''''''''''''''''''''''''來描述更多你的程序,如果你仍然卡住 – Borodin
Thanks.Resolved用相同的代碼的問題。 –
現有的答案沒有達到我的預期的副本,所以我不得不推出自己的。這裏是模塊和它的單元測試。
module ConvertWindowsPath
def convert_windows_path windows_path
manipulated_windows_path = windows_path.clone
unix_path = ""
if windows_path.start_with? "\\\\" #it's on some network thing
unix_path = "//"
manipulated_windows_path = manipulated_windows_path[2..-1]
elsif manipulated_windows_path.start_with? "\\"
unix_path = "/"
end
unix_path += manipulated_windows_path.split("\\").join("/")
unix_path += "/" if manipulated_windows_path.end_with?("\\")
unix_path
end
end
require 'test/unit'
class ConvertWindowsPathTest < Test::Unit::TestCase
include ConvertWindowsPath
def setup
@expectations = {
"C:\\" => "C:/",
"\\\\vmware-host\\Shared Folders\\Foo\\bar-baz" => "//vmware-host/Shared Folders/Foo/bar-baz",
"D:\\Users\\ruby\\Desktop\\foo.txt" => "D:/Users/ruby/Desktop/foo.txt",
"z:\\foo\\bar\\" => "z:/foo/bar/"
}
end
def test_expectations
@expectations.each do |windows_path, expected_unix_path|
assert_equal expected_unix_path, convert_windows_path(windows_path)
end
end
end
你是如何 「獲取路徑」?你嘗試過什麼(顯示你的代碼)? – Floris
我沒有使用紅寶石的經驗,但通常你可以通過加倍來逃避轉義字符(「\\」將匹配字面反斜槓字符)。 – Michelle
「但它不允許將路徑拆分爲'\'是轉義字符。」 那麼,這部分是一個簡單的修復。只需使用兩個反斜槓(第一個反轉第二個)。 – Ajedi32