Существующие ответы не соответствовали моим ожиданиям, так что мне пришлось катиться самостоятельно. Вот модуль и его модульный тест.
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
У меня нет опыта с рубином, но обычно вы можете избежать escape-символа, удвоив его («\\» будет соответствовать буквальному символу обратной косой черты). – Michelle
«Но это не позволяет разбить путь, так как« \ »является символом побега». Ну, эта часть проста в установке. Просто используйте две обратные косые черты (первая выходит за вторую). – Ajedi32