ruby的net :: ftp nlst(' ** / *')方法在Windows上递归不起作用

时间:2014-07-29 08:46:26

标签: ruby windows recursion ftp

我试图使用ruby的net::ftp nlst('**/*')方法从Windows服务器递归获取文件。这在Windows上递归不起作用。

我收到错误:  "550 The filename,directory name, or volume label syntax is incorrect".

我已经看过使用这种语法的程序员的例子。我猜测这种语法在Windows上不起作用。为什么?是否有一种简单的方法可以使用某种类型的glob语法,即使我必须使用Dir[](如果使用Dir[]我如何将它指向服务器的目录)?

我尝试过只使用一个*,这样可以获取当前目录中的所有文件,而不是文件夹。

1 个答案:

答案 0 :(得分:0)

我发现由于某种原因,文件被视为目录。

调试时,

File.directory?(a_known_file)返回true。 因此,ftp.chdir(a_known_file)试图在文件上抛出异常。 我假设在使用递归glob时nlst('**/*')中也会发生这种情况。

def is_ftp_file?(ftp, file_name)
  ftp.chdir(file_name)
  ftp.chdir('..')
  false
rescue
  true
end

我发现上面的代码是相关问题的答案(Ruby FTP Separating files from Folders)。有了它,我创建了自己的递归方法。

我将这个问题保持开放几天,以确定是否有人可以提出更好的答案(使用glob语法)或解释为什么会在Windows上发生这种情况。