从ruby中的tar.gz文件中读取文件

时间:2014-11-20 12:48:35

标签: ruby file file-io

我正在尝试使用以下代码从tar.gz文件中读取特定文件

def get_data_file_file(file, type)
   begin
      Gem::Package::TarReader.new(Zlib::GzipReader.open(file)).each do |entry|
         if(entry.full_name == type)
            return entry.read
         end
      end
   rescue Zlib::GzipFile::Error => e
      stacktrace = e.backtrace.join("\n")
      LOGGER.error("ERROR: #{e.message}\n #{stacktrace}")
      return nil
   end
   return nil
end

但问题来了,因为文件的大小为“entry.read”一次性读取整个文件并保留在内存中。

任何人都知道其他选择吗?任何帮助表示赞赏。

感谢。 阿米特

1 个答案:

答案 0 :(得分:0)

尝试通过块读取块,通过给出一个参数来读取你想要读取的字节数:

entry.read(1024*1024) #1mb each time

更多信息: Read a file in chunks in Ruby