2016-02-26 60 views
0

我試圖從文本文件中的UNC路徑列表(\ servername \ HOME \ username)列出用戶主目錄中的所有文件\目錄。我在Windows中運行Ruby。我一直在使用Dir.chdir來更改在變量中工作的UNC路徑,但不是當我在循環中使用它時使用它。我想我的語法可能有問題嗎?Ruby Dir.chdir在使用unc路徑的循環中不工作

首先我的文本文件看起來是這樣的:

\\\\servername\\HOME\\username1 
\\\\servername\\HOME\\username2 
\\\\servername\\HOME\\username3 

這是工作程序:

require 'FileUtils' 

workingpath = "\\\\servername\\HOME\\username" 
filename = '**/*.*' 

Dir.chdir workingpath 
puts Dir[filename] 

這不:

require 'FileUtils' 

hostlist = "C:\\home_dirs.txt" 
filename = '**/*.*' 

File.open(hostlist).each_line do |item| 
Dir.chdir item 
puts Dir[filename] 
end 

我把錯誤獲得是programname.rb:8:在'open'中:沒有這樣的文件或目錄@ dir_initialize - \\ servername \ HOME \ username(Errn Ø:: ENOENT)。

基本上問題是目錄永遠不會更改爲unc路徑。我找不出爲什麼,因爲它改變了第一個程序中的目錄。我在這裏錯過了什麼?

回答

0

您不需要在文本文件中轉義反斜槓,因爲它只是數據,不是代碼中的字符串文字。我會說這是問題,除了奇怪的是你的錯誤信息有正確數量的反斜槓,所以一些東西不加起來。

+0

感謝您的輸入!可悲的是,我確實已經嘗試過,並再次嘗試確認。錯誤是稍有不同: 'chdir':無效的參數@ dir_chdir - \\ servername \ HOME \ username1(Errno :: EINVAL) –

0

取出逃生反斜槓只是問題的一部分。之後,出現真正的錯誤:

Errno :: EINVAL都指向空白。

我想通了,它必須是Windows換行隱藏字符。我找到並使用了.chomp,並做到了!我所做的只是把它添加到像這樣的項目。

Dir.chdir item.chomp 
+0

我編輯了答案以刪除「謝謝」和聊天,以便實際答案更清晰可見。 StackOverflow不是一個論壇。我也改進了文字,請審覈。您可以使用答案下方的**編輯**鏈接編輯您的答案。如果需要的話,你甚至可以回滾我的編輯。 –