Ich musste viele Zip-Dateien für eine bestimmte Aufgabe erstellen, wurde aber durch die Begegnung mit diesem Juwel gerettet. In diesem Artikel werden vier Möglichkeiten zum Arbeiten mit Zip-Dateien mit Ruby vorgestellt.
Ruby 2.4 oder höher
Gemfile hinzufügen
Gemfile
gem 'rubyzip'
Führen Sie den folgenden Befehl im Terminal aus
terminal
bundle install
Zip::OutputStream.open('example.zip') do |zos|
zos.put_next_entry('first_file.txt')
zos.puts 'hoge hoge'
zos.put_next_entry('second_file.txt')
zos.puts 'hoge again'
end
Verwenden Sie eine Zeichenfolge oder die von der Datei gelesenen Daten als Argument für die Puts-Methode. Der Inhalt der generierten Zip-Datei hat die folgende Struktur.
example.zip
- first_file.txt
- second_file.txt
Der Inhalt jeder Datei ist wie folgt.
first_file.txt
hoge hoge
second_file.txt
hoge again
Die Methode "get_next_entry" legt die Dateien in der Zip-Datei nacheinander fest.
Zip::InputStream.open('example.zip') do |zis|
entry = zis.get_next_entry
print "First line of '#{entry.name} (#{entry.size} bytes): "
puts "'#{zis.gets.chomp}'"
entry = zis.get_next_entry
print "First line of '#{entry.name} (#{entry.size} bytes): "
puts "'#{zis.gets.chomp}'"
end
Wenn Sie die von ** 1 ** generierte example.zip
lesen, sehen Sie Folgendes.
terminal
First line of 'first_file.txt (10 bytes): hoge hoge
First line of 'second_file.txt (11 bytes): hoge again
Verwenden Sie die Methode "get_input_stream (entry)", um den "InputStream" für jeden Eintrag abzurufen.
zf = Zip::File.new('example.zip')
zf.each_with_index do |entry, index|
puts "entry #{index} is #{entry.name}, size = #{entry.size}, compressed size = #{entry.compressed_size}"
end
Dieser Quellcode zeigt den "Index", "Namen", "Größe", "komprimierte Größe" der komprimierten Datei in der Zip-Datei an.
Wenn Sie die von ** 1 ** generierte example.zip
lesen, sehen Sie Folgendes.
terminal
entry 0 is first_file.txt, size = 10, compressed size = 10
entry 1 is second_file.txt, size = 11, compressed size = 13
Ändern Sie die Zip-Datei direkt
Fügen Sie die durch den Pfad angegebene Datei mit "add (Eintrag, Pfad)" hinzu
Umbenennen mit umbenennen (Eintrag, neuer_Name)
Ändern Sie die von ** 1 ** generierte Datei
Zip::File.open('example.zip') do |zip_file|
zip_file.add('third_file.txt', 'third_file.txt')
zip_file.rename('first_file.txt', 'first_file_rename.txt')
zip_file.add('fourth_file.txt', 'fourth_file.txt')
end
Die folgenden Dateien wurden zusätzlich vorbereitet.
third_file
hoge third
fourth_file
hogehoge fourth
Ich werde es versuchen. Informationen erhalten Sie mit ** 3 **
terminal
entry 0 is second_file.txt, size = 11, compressed size = 13
entry 1 is third_file.txt, size = 10, compressed size = 12
entry 2 is first_file_rename.txt, size = 10, compressed size = 10
entry 3 is fourth_file.txt, size = 14, compressed size = 14
Die generierte Zip-Datei wurde in die folgende Struktur geändert:
example.zip
- second_file_txt
- third_file.txt
- first_file_rename.txt
- fourth_file.txt
In diesem Artikel wurden vier Möglichkeiten zum Arbeiten mit Zip-Dateien vorgestellt.
Es gibt andere nützliche Methoden in rubyzip
, daher wird empfohlen, einen Blick darauf zu werfen.
https://github.com/rubyzip/rubyzip
Recommended Posts