Rustでzip圧縮ファイルを作成する

 zip圧縮ファイルの操作はzip外部ライブラリ クレートなどを利用します。



Cargo.toml

――――――――――――――――――――

[package]

name = "epub_maker"

version = "0.1.0"

edition = "2021"


[dependencies]

tempfile = "3"

zip = "0.5"

――――――――――――――――――――


main.rs

――――――――――――――――――――

use std::fs::File;

use std::io::BufWriter;

use std::io::Write;

use std::io::BufReader;

use std::io::Read;

use tempfile::tempdir;

use zip::ZipWriter;

use zip::write::FileOptions;

use zip::CompressionMethod;


fn main() {


  let temp_dir = tempdir().unwrap();


  let temp_file_path = temp_dir.path().join("temp.txt");


  let mut buf_writer = BufWriter::new(File::create(&temp_file_path).unwrap());


  buf_writer.write("\

あいうえお


かきくけこ\n\

  ".as_bytes()).unwrap();



  buf_writer.write(vec![

    "さしすせそ",

    "",

    "たちつてと\n"

  ].join("\n").as_bytes()).unwrap();


  buf_writer.flush().unwrap();


  let mut zip_writer = ZipWriter::new(File::create("/home/◯◯/デスクトップ/temp.zip").unwrap());

  let file_options = FileOptions::default().compression_method(CompressionMethod::Stored);


  zip_writer.start_file("temp.txt", file_options).unwrap();


  let mut buf_reader = BufReader::new(File::open(&temp_file_path).unwrap());

  let mut bytes_vec = Vec::new();

  buf_reader.read_to_end(&mut bytes_vec).unwrap();


  zip_writer.write(&bytes_vec).unwrap();

  zip_writer.flush().unwrap();


  zip_writer.finish().unwrap();


  std::fs::remove_file(&temp_file_path).unwrap();

  temp_dir.close().unwrap();

}

――――――――――――――――――――

 コピペする場合は、2文字の全角空白を4文字の半角空白に、◯◯をLinuxのユーザ名に、置換してください。

 Windowsの場合は、/home/◯◯/デスクトップ/temp.zipを適切に修正してください。


 FileOptions::default().compression_method(CompressionMethod::Stored)は無圧縮です。圧縮する場合はFileOptions::default()、または、FileOptions::default().compression_method(CompressionMethod::Deflated)とします。


 Linuxの場合はzipinfo '◯◯.zip'というコマンドでzip圧縮の圧縮率を知る事ができます。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る