3

さて、Ruby でファイルを解凍するための次のコードを見つけました。

def unzip_file (file, destination)
    Zip::ZipFile.open(file_path) { |zip_file|
        zip_file.each { |f|
            f_path=File.join("destination_path", f.name)
            FileUtils.mkdir_p(File.dirname(f_path))
            zip_file.extract(f, f_path) unless File.exist?(f_path)
        }
    }
end

この上で、必要なgemがインストールされていることを確認するために次を使用しています。

begin
    require 'rubygems'
rescue LoadError
    'gem install rubygems'
end
begin
    require 'zip/zip'
rescue LoadError
    'gem install rubyzip'
end

したがって、 unzip_file を呼び出すと、次のエラーが発生します。

in `unzip_file': uninitialized constant Zip (NameError)

私は何を間違っていますか?ありがとう!

4

2 に答える 2

4

注意: サンプル スクリプトはシンボリック リンクも展開し、問題../../../../etc/passwdなく展開します。rubyzip gem は、独自のパスネームロンダリングを行うことを期待しています。

rubyzip 1.1.4 では、Zip::Zipfile名前が に変更されたことに注意してくださいZip::File

于 2014-06-17T09:52:11.423 に答える