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圧縮の圧縮率を知る事ができます。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます