2010-10-22 59 views
3

我试图通过Windows上的irb访问UNC共享。在Windows外壳将是如何在Windows上的Ruby中处理UNC路径?

\\server\share 

我试着逃避所有的反斜杠。

irb(main):016:0> Dir.entries '\\\\server\share' 
Errno::ENOENT: No such file or directory - \\server\share 

,并使用IP地址而不是名称

irb(main):017:0> Dir.entries '\\\\192.168.10.1\share' 
Errno::ENOENT: No such file or directory - \\192.168.10.1\share 
+2

至少1.9.3,你可以使用正斜杠,你不必担心转义或任何'Dir ['// server/share/*']''。看起来要比逃避所有反斜杠好得多。 – 2012-12-06 20:02:48

回答

5

试图逃跑 '\' 另一个 '\'

Dir.entries( '\\\\ 192.168.10.1 \\份额')

+2

哦,上帝。我的路上有一个错字...但是,它使用双反斜杠。感谢大家... – Sven 2010-10-22 10:11:46

0

你好像缺少了结尾的斜线。尝试'\\server\share\'

它类似于Windows驱动器的根目录。这是C:\,不C:

+0

IRB似乎无法识别字符串终止这种方式... – Sven 2010-10-22 09:57:39

+0

无论是当加倍反斜杠:irb(main):021:0> Dir.entries('\\\\ server \\ share \ \')Errno :: ENOENT:没有这样的文件或目录 - \\ server \ share \ – Sven 2010-10-22 10:01:13

5

的Ruby解释的路径POSIX way,这意味着您应尽可能使用正斜杠。

//server/share 

跟在本地Windows中一样,尾部斜线是不必要的。你可以使用反斜杠,但它们必须是escaped和另一个反斜杠。

\\\\server\\share 

我只推荐当你从本地程序直接传递UNC路径并且不能转换它们。当我混合的Ruby/Windows的路径,比如在使用Ruby方法和原生的Windows应用程序构建脚本,它们各自需要不同的路径,我会用一些助手:

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

def posix_path(value) 
    value.gsub '\\', '/' 
end 

总是用单你的路引号,如果它们是字面的,或者如果你正在插入,则用双引号。正斜杠告诉Ruby开始解释一个正则表达式。这是我在irb中常见的错误。

irb> File.exists? //server/share 
SyntaxError: (irb):2: unknown regexp options - rvr