我一直在试图获得一个(相对)简单的压缩和解压缩功能,适用于任何类型的对象(图像,CSV文件,文档等),并没有任何成功。Ruby zlib放气和膨胀不能按预期工作
我已经尝试了很多东西,目前我认为这个代码是接近它(不是我的代码),但是我一直无法使它工作。
Hoge.txt内容:
blahblah123
红宝石放气类名为rubyfiletest.rb:
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
与此代码
所以它的作用是创建一个名为.gz文件题为hoge.txt.gz它在命令提示符中生成这个
rubyfiletest.rb:9:in `read': No such file or directory - hoge.txt (Errno::ENOEN)
此外,如果我尝试打开新创建的文件与Wi nrar/7zip的,它会给我这个错误:
The archive is either in unknown format or damaged.
红宝石充气类名为rubyinflate.rb:
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.txt.txt(DOH!),并一直在寻找这条道路hoge.txt。所以,现在我改变了红宝石压缩代码一点,这样的输出将创建一个由马修T.指出,一个有效的gzip文件
这是它看起来像现在
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)
我认为这些错误可能会导致数据不被复制?如果我使用了一个图片,假设这段代码能够工作,那么这些数据会被复制过来?
使用File.expand_path('',__FILE__)打印,如果你在正确的目录/路径 –
我用Dir.pwd和我确实在正确的路径(桌面)所有的文件(红宝石和文本文件)位于。 – Surep
由于您似乎在Windows上,您是否有机会隐藏已知文件类型的扩展名?这会导致你的hoge.txt文件(如你在桌面上看到的)被命名为hoge.txt.txt。 –