目前我得到的路径\\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