16

このような形式で、Windowsプラットフォームのrubyスクリプトのネットワークパスにアクセスしようとしています。

\\servername\some windows share\folder 1\folder2\

これをパスとして使用しようとすると、機能しません。このスクリプトでは、単一の円記号が適切にエスケープされていません。

path = "\\servername\some windows share\folder 1\folder2\"
d = Dir.new(path)

パス内のスラッシュを適切にエスケープするために、考えられるすべてのことを試みました。ただし、特別な意味があるため、その1つの円記号を回避することはできません。一重引用符、二重引用符、バックスラッシュ自体をエスケープし、%Q {}や%q {}などの代替引用符を使用し、ASCIIから文字への変換を使用してみました。私が正しくやっていないという意味では何も機能しません。:-)現時点での一時的な解決策は、ネットワークドライブN:\をそのパスをポイントしてマップし、その方法でアクセスすることですが、それは解決策ではありません。

誰かが単一の円記号を適切にエスケープする方法を知っていますか?

ありがとうございました

4

2 に答える 2

24

次のように、すべてのバックスラッシュを2倍にするだけです。

"\\\\servername\\some windows share\\folder 1\\folder2\\"
于 2010-05-05T15:57:22.523 に答える
14

これを試して

puts '\\\\servername\some windows share\folder 1\folder2\\'
#=> \\servername\some windows share\folder 1\folder2\

文字列(たとえば'foo')を定義するために一重引用符を使用している限り、一重引用符を\エスケープする必要はありません。次の2つの場合を除いて

  1. \\単一になり\ます。だから、あなたが必要な\\\\スタートをあなたに与えるでしょう。\\
  2. パスの最後にある末尾\は、最後の引用をエスケープしようとするため、\\そこにも必要です。

または、

あなたはあなた自身のためにエレガントなヘルパーを定義することができます。不格好なパスセパレータを使用する代わりに、次のようなメソッドと組み合わせて\使用​​できます。/

def windows_path(foo)
  foo.gsub('/', '\\')
end

puts windows_path '//servername/some windows share/folder 1/folder2/'
#=> \\servername\some windows share\folder 1\folder2\

甘い!

于 2010-05-05T15:57:52.667 に答える