2014-02-19 94 views
1

我想從Windows路徑中提取目錄名稱。 Windows路徑是一個字符串,類似如下:File.dirname窗口路徑返回

"c:\\some\path\name" 

,當我做到以下幾點:

File.dirname("c:\\some\\path\\name") 

結果是

"." 

如果我的UNIX路徑上運行此它工作正常

File.dirname("/some/path/name") => "/some/path" 

我是否需要設置FILE::ALT_SEPARATOR?我嘗試過不同的路徑變化無濟於事。

回答

0

我發現的一個解決方案是用正斜槓替換所有反斜槓。這工作得很好。但是,仍然必須有更好的解決方案。

File.dirname("c:\\some\\path\\name".gsub('\\', '/')).gsub('/', '\\') 
=> "c:\\some\\path" 

爲了保持表示的一致性,我在dirname調用之後回到反斜槓中。

1

推薦的方法是在Ruby代碼中始終使用unix類型的正斜槓作爲路徑分隔符。即使您在Windows操作系統上使用它們,它們也會在內部正確映射到其反斜槓路徑分隔符。

如果反斜槓來自用戶輸入,則需要檢測操作系統是否允許在文件名中使用反斜槓(例如,Windows不支持,Unix)。那麼如果反斜槓不被允許,那麼你應該在驗證期間將它們轉換爲正斜槓。在Ruby代碼中,將所有分隔符保留爲正斜槓。所以,在使用諸如File.dirname之類的命令時,你不應該關心反斜槓。

+0

用戶將指定路徑。我是否應該對反斜槓輸入進行補償並將其全部轉換爲正斜槓? – robinjohnobrien