TarWriter выбрасывает Gem :: Package :: TarWriter :: FileOverflow - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу сгенерировать tar из пакета файлов.

out_file = File.new('some.tar', 'w')
tar = Gem::Package::TarWriter.new out_file
attachments = #Array of attachment objects
attachments.each{|a|
   file = Attachment.new(a).read_file #returns a String
   file.force_encoding('UTF-8')
   tar.add_file_simple( a[:filename], 777, file.length) do |io|
      io.write(file)
    end
}

Gem :: Package :: TarWriter :: FileOverflow - Вы попытались передать больше данных, чем помещается в файл.

Кто-нибудь знает, почему это происходит и как это исправить?

1 Ответ

0 голосов
/ 26 сентября 2018

String#length возвращает количество символов в строке.Поскольку символ UTF-8 может быть представлен более чем одним байтом, размер байта строки обычно больше.

TarWriter теперь ожидает, что размер файла будет указан в байтах.Таким образом, если вы используете в вашем файле что-то еще, кроме простых символов ascii, он будет переполнен.

Чтобы решить эту проблему, вы должны передать file.bytesize методу add_file_simple вместоfile.size.

...