我正在尝试使用ruby的net::ftp nlst('**/*')方法从windows服务器递归地获取文件。这在windows上不能递归地工作。
我得到一个错误:
"550 The filename,directory name, or volume label syntax is incorrect".
我见过程序员使用这种语法的例子。我猜这个语法在windows上不起作用。为什么?即使我必须使用Dir[](如果使用Dir[],如何在服务器目录中引导它),是否有一种简单的方法来使用某种glob语法?
我试过只使用一个*,这将获取当前目录中的所有文件,而不是文件夹。

最佳答案

我发现由于某些原因文件被认为是目录。
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上会发生这种情况。

关于ruby - ruby的net::ftp nlst('**/*')方法在Windows上无法递归工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25011413/

10-11 07:35
查看更多