2010-10-22 60 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