0

ftpサイトからファイル(.csv)を取得し、それらをすべて同じフォルダーにローカルに保存しようとしています。私のコードは次のようになります。

#! /usr/bin/ruby

require 'logger'
require 'fileutils'
require 'net/ftp'
require 'rubygems'
require 'mysql2'
require 'roo'
require 'date'

# logging setup
log = Logger.new("/path_to_logs/ftp_log.log", 10, 1024000)
log.level = Logger::INFO

export_ftp_path = '/Receive/results/'
export_work_path ='/Users/pierce/results_exports/'

Net::FTP.open('host', 'username', 'password') do |ftp|
    log.info("Logged into FTP")
    ftp.passive = true
    ftp.chdir("#{export_ftp_path}")
      ftp.list.each do |file|
        log.info("Found file #{file}")
        new_file = file[56..115]  #take part of the file name and remove spaces and periods
        new_file = new_file.gsub(/[.]+/, "") 
        new_file = new_file.gsub(/\s/, "0") 
        ftp.gettextfile(file,"#{new_file}")
        log.info("Downloaded file #{new_file}")
      end
end

そして、これが私が受け取るエラーです:

/Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/net/ftp.rb:560:in `initialize': No such file or directory -  (Errno::ENOENT)
    from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/net/ftp.rb:560:in `open'
    from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/net/ftp.rb:560:in `gettextfile'
    from ftp_test.rb:44:in `block (2 levels) in <main>'
    from ftp_test.rb:33:in `each'
    from ftp_test.rb:33:in `block in <main>'
    from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/net/ftp.rb:116:in `open'

提案されているように、putsfileとputsnew_fileの値は次のとおりです。

file = -rwxr-xr-x    1 1130419  114727       9546 May 17 08:11 results_Wed. 16 May 2012.csv
new_file = results_Wed0230May02012csv

ファイルを正しく保存するためにgettextfileまたはスクリプト内で何を変更するかについての提案はありますか?

4

1 に答える 1

1

ディレクトリ内のファイルのリストが必要な場合nlstの代わりに使用する必要があります。listそれ以外の場合は、の出力をlist適切に解析する必要があります。

ファイルをリクエストするときは、すべてのスペースを含む元のファイル名である必要があります。ファイルを保存するときは、任意のファイルにすることができます(スペースを含むかどうかは関係ありません)。エラーは、間違ったファイルを要求していたことが原因でした。nlst代わりにあなたのケースで使用してください。それはそれをはるかに簡単にします(変換や解析は必要ありません)。

于 2012-06-24T08:35:40.447 に答える