私は、あらゆる種類のオブジェクト (画像、csv ファイル、ドキュメントなど) で動作する (比較的) 単純な圧縮および解凍機能を取得しようとしてきましたが、まったく成功していません。
私は多くのことを試しましたが、現在、このコードはそれに近いと思います (私のコードではありません) が、うまく動作しませんでした。
Hoge.txt の内容:
blahblah123
rubyfiletest.rb という名前の Ruby deflate クラス:
require "zlib"
file_name = "hoge.txt"
compressed_file = File.open(file_name +".gz", "w+")
zd = Zlib::Deflate.new(Zlib::BEST_COMPRESSION, 15, Zlib::MAX_MEM_LEVEL, Zlib::HUFFMAN_ONLY)
compressed_file << zd.deflate(File.read(file_name))
compressed_file.close
zd.close
したがって、このコードでは、コマンド プロンプトでこれを生成する hoge.txt.gz という名前の .gz ファイルを作成します。
rubyfiletest.rb:9:in `read': No such file or directory - hoge.txt (Errno::ENOEN)
また、新しく作成したファイルを winrar/7zip で開こうとすると、次のエラーが表示されます。
The archive is either in unknown format or damaged.
rubyinflate.rb というタイトルの Ruby インフレート クラス:
require 'zlib'
File.open('hoge.txt.gz', 'rb') do |compressed|
File.open('hoge.txt', 'w') do |decompressed|
gz = Zlib::GzipReader.new(compressed)
result = gz.read
decompressed.write(result)
gz.close
end
end
圧縮ファイルを開くことさえできず、これに関して非常に多くの問題を抱えているため、圧縮が正しく機能していないと推測しています。私は ruby を初めて使用することを言及しておく価値があると思います。また、これが実装されている方法で、画像とすべての種類のファイルを適切に圧縮/解凍できるかどうかも知りたいです。
* アップデート *
hoge が hoge.txt.txt として保存されていて (doh!)、そのパスで hoge.txt を探していたため、間違ったパスのエラーが発生していました。そのため、マシュー T.
これが今の姿です
require "zlib"
file_name = "hoge.txt"
compressed_file = File.open(file_name +".gz", "w+b")
zd = Zlib::GzipWriter.new(compressed_file)
zd << File.read(file_name)
compressed_file.close
zd.close
これを新しい rubyfiletest.rb クラスとして GzipWriter を使用して解凍すると、このクラスを実行すると次のエラーが表示されます。
rubyfiletest.rb:8 in 'write': closed stream (IOError)
これでも .gz ファイルが生成されます (これで問題なく winrar/7zip で開くことができますが、ファイルは空で、「blahblah123」が含まれている必要があります)。圧縮して rubyinflate.rb を実行すると、rubyinflate.rb から次のエラーが表示されます。
rubyinflate.rb:6 in 'read': unecpected end of file (Zlib::GzipFile::Error)
これらのエラーが原因で、データがコピーされない可能性があると思いますか? 画像を使用した場合、このコードが機能すると仮定して、そのデータがコピーされますか?