我正在尝试从文本文件中的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路径。我无法弄清楚为什么因为它在第一个程序中改变了目录。我在这里缺少什么?
答案 0 :(得分:1)
取出逃生反斜杠只是问题的一部分。之后,出现真正的错误:
Errno :: EINVAL都指向空白。
我发现它必须是windows换行隐藏的字符。我发现并使用了.chomp,就这样做了!我所做的只是将它添加到项目中。
Dir.chdir item.chomp
答案 1 :(得分:0)
您不需要在文本文件中转义反斜杠,因为它只是数据,而不是代码中的字符串文字。我会说这是问题所在,除了奇怪的是你的错误信息有正确数量的反斜杠,所以有些事情并没有加起来。