J'ai dû créer beaucoup de fichiers zip pour une certaine tâche, mais j'ai été sauvé en rencontrant ce joyau. Cet article présente quatre façons de travailler avec des fichiers zip à l'aide de ruby.
Ruby 2.4 ou supérieur
Ajouter à Gemfile
Gemfile
gem 'rubyzip'
Exécutez la commande suivante dans le terminal
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
Utilisez une chaîne ou les données lues par le fichier comme argument de la méthode «put». Le contenu du fichier zip généré a la structure suivante.
example.zip
- first_file.txt
- second_file.txt
Le contenu de chaque fichier est le suivant.
first_file.txt
hoge hoge
second_file.txt
hoge again
La méthode get_next_entry
définit les fichiers dans le fichier zip les uns après les autres.
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
Si vous lisez le ʻexample.zip` généré dans ** 1 **, vous verrez ce qui suit.
terminal
First line of 'first_file.txt (10 bytes): hoge hoge
First line of 'second_file.txt (11 bytes): hoge again
Utilisez la méthode get_input_stream (entry)
pour obtenir le ʻInputStream` pour chaque entrée.
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
Ce code source affiche les fichiers compressés «index», «nom», «taille», «taille_ compressée» dans un fichier zip.
Si vous lisez le ʻexample.zip` généré dans ** 1 **, vous verrez ce qui suit.
terminal
entry 0 is first_file.txt, size = 10, compressed size = 10
entry 1 is second_file.txt, size = 11, compressed size = 13
Modifiez directement le fichier zip
Ajoutez le fichier indiqué par chemin avec ʻadd (entrée, chemin) Renommer avec
renommer (entrée, nouveau_nom)`
Modifier le fichier généré par ** 1 **
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
Les fichiers suivants ont également été préparés.
third_file
hoge third
fourth_file
hogehoge fourth
Je vais essayer. Obtenez des informations en utilisant ** 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
Le fichier zip généré a été modifié pour avoir la structure suivante:
example.zip
- second_file_txt
- third_file.txt
- first_file_rename.txt
- fourth_file.txt
Cet article a présenté quatre façons de travailler avec des fichiers zip.
Il existe d'autres méthodes utiles dans rubyzip
, il est donc recommandé d'y jeter un œil.
https://github.com/rubyzip/rubyzip
Recommended Posts