Ruby Dir.chdir不使用unc路径在循环中工作

时间:2016-02-26 18:37:59

标签: ruby

我正在尝试从文本文件中的UNC路径列表(\ servername \ HOME \ username)列出用户主目录中的所有文件\目录。我在Windows中运行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(Errno :: ENOENT)。

基本上问题是目录永远不会改变到unc路径。我无法弄清楚为什么因为它在第一个程序中改变了目录。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

取出逃生反斜杠只是问题的一部分。之后,出现真正的错误:

  

Errno :: EINVAL都指向空白。

我发现它必须是windows换行隐藏的字符。我发现并使用了.chomp,就这样做了!我所做的只是将它添加到项目中。

Dir.chdir item.chomp

答案 1 :(得分:0)

您不需要在文本文件中转义反斜杠,因为它只是数据,而不是代码中的字符串文字。我会说这是问题所在,除了奇怪的是你的错误信息有正确数量的反斜杠,所以有些事情并没有加起来。