Вопрос по ruby, zip, rubyzip, rubygems – Как создать zip-файл только в памяти в ruby?

3

Я хочу создать почтовый файл всех файлов HTML в данном каталоге. Почтовый индекс будет отправлен в виде вложения по электронной почте вместе с остальными файлами из каталога. Все почтовые клиенты, которые я пробовал до сих пор, испытывают затруднения при чтении электронного письма, если какое-либо вложение является HTML-файлом, если я отправляю его из pony. Поэтому я подумал, что я их застегну.

Есть ли способzip HTMLfiles on the fly но действительноonly in the memoryбез использования каких-либо временных файлов наWindows platform? Желательно не использовать какую-либо внешнюю программу?

Если я правильно понял, оба метода описаны в:

http://info.michael-simons.eu/2008/01/21/using-rubyzip-to-create-zip-files-on-the-fly/ or http://rubyzip.sourceforge.net/classes/Zip/ZipFile.html

используете какой-то временный файл.

Почему временный файл нежелателен? Обычно их используют за кулисами для временного хранения. the Tin Man
Можно использовать временный файл, если я не могу сделать это только в памяти. Можно использовать временный файл, но я предпочитаю этого не делать. Radek
Причина, по которой временный файл является выгодным, заключается в том, что архив становится достаточно большим для воздействия на оперативную память. Буферизация во временном файле обеспечит более длительную работу машины, поскольку вероятность того, что она будет занимать все доступное дисковое пространство, намного меньше, чем у всей доступной оперативной памяти. Если вы работаете на машине с небольшим количеством свободной оперативной памяти, серьезно подумайте о временном файле. the Tin Man
Это скорее наоборот. Почтовый индекс будет содержать в основном только два небольших файла HTML. Поэтому я подумал, что будет легче и быстрее делать все в памяти. Radek
Для небольшого почтового индекса это будет немного быстрее после того, как вы внесете в буфер. Я сомневаюсь, что вы заметили большую разницу. the Tin Man

Ваш Ответ

1   ответ
1

что, возможно, вы могли бы использовать объект StringIO для записи, но похоже, что класс ZipOutputStream настаивает на открытии временного файла.

Если вы не возражаете против вызова внешней программы, стандартный linux-zip может сказать, что нужно отправить отправление на стандартный вывод вместо файла, используя & quot; - & quot; вместо имени файла. Так что просто соберите выходные данные в переменную и делайте с ней что угодно.

zipdata = %x(zip -q - *.html)

Я не думаю, что это будет повышение эффективности по сравнению с использованием только временного файла, но вы должны измерить его, чтобы быть уверенным.

извините, я не упомянул, что я нахожусь на окнах. Мне нравится ваш подход, хотя. Radek

Похожие вопросы