【问题标题】:ruby's net::ftp nlst('**/*') method does not work recursively on windowsruby 的 net::ftp nlst('**/*') 方法在 Windows 上不能递归工作
【发布时间】:2014-07-29 08:46:25
【问题描述】:

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

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

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

我试过只使用一个 *,这会得到当前目录中的所有文件,而不是文件夹。

【问题讨论】:

    标签: ruby windows recursion ftp


    【解决方案1】:

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

    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 上发生这种情况。

    【讨论】:

    • 我相信这个功能会给我的根目录带来问题。
    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多