Featured image of post rustのzipfileでファイルが欠損する

rustのzipfileでファイルが欠損する

writeじゃなくてwrite_allを使え

結論

writeじゃなくてwrite_allを使え

rustのzipfileでファイルが欠損する

1
2
3
4
let mut buf = Vec::new();
let _ = file.read_to_end(&mut buf);
let _ = zip.start_file(file.name(), options);
let _ = zip.write(&buf).unwrap();

こんな感じのコードでJepgをZip圧縮していたら,Jpegファイルが欠損している.画像処理でまずったかと思ったら,zipfileの書き込みがおかしかった.

原因

そもそもwriteはすべて書き込むことが保証されていないと リファレンス に書かれている.後からよく考えたら戻り値が書き込まれたバイト数となっている時点でおかしいと気づくべきだった.

write_allはOkなら書き込みが完了していることが保証されている.

Licensed under CC BY-SA 4.0
Built with Hugo
テーマ StackJimmy によって設計されています。