Yi Kong | f19c3f2 | 2021-02-13 04:04:00 +0800 | [diff] [blame] | 1 | use std::io::prelude::*; |
| 2 | use zip::write::FileOptions; |
| 3 | |
| 4 | fn main() { |
| 5 | std::process::exit(real_main()); |
| 6 | } |
| 7 | |
| 8 | fn real_main() -> i32 { |
| 9 | let args: Vec<_> = std::env::args().collect(); |
| 10 | if args.len() < 2 { |
| 11 | println!("Usage: {} <filename>", args[0]); |
| 12 | return 1; |
| 13 | } |
| 14 | |
| 15 | let filename = &*args[1]; |
| 16 | match doit(filename) { |
| 17 | Ok(_) => println!("File written to {}", filename), |
| 18 | Err(e) => println!("Error: {:?}", e), |
| 19 | } |
| 20 | |
David LeGare | 132eccb | 2022-04-11 16:44:12 +0000 | [diff] [blame] | 21 | 0 |
Yi Kong | f19c3f2 | 2021-02-13 04:04:00 +0800 | [diff] [blame] | 22 | } |
| 23 | |
| 24 | fn doit(filename: &str) -> zip::result::ZipResult<()> { |
| 25 | let path = std::path::Path::new(filename); |
| 26 | let file = std::fs::File::create(&path).unwrap(); |
| 27 | |
| 28 | let mut zip = zip::ZipWriter::new(file); |
| 29 | |
| 30 | zip.add_directory("test/", Default::default())?; |
| 31 | |
| 32 | let options = FileOptions::default() |
| 33 | .compression_method(zip::CompressionMethod::Stored) |
| 34 | .unix_permissions(0o755); |
| 35 | zip.start_file("test/☃.txt", options)?; |
| 36 | zip.write_all(b"Hello, World!\n")?; |
| 37 | |
| 38 | zip.start_file("test/lorem_ipsum.txt", Default::default())?; |
| 39 | zip.write_all(LOREM_IPSUM)?; |
| 40 | |
| 41 | zip.finish()?; |
| 42 | Ok(()) |
| 43 | } |
| 44 | |
David LeGare | 132eccb | 2022-04-11 16:44:12 +0000 | [diff] [blame] | 45 | const LOREM_IPSUM : &[u8] = b"Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tellus elit, tristique vitae mattis egestas, ultricies vitae risus. Quisque sit amet quam ut urna aliquet |
Yi Kong | f19c3f2 | 2021-02-13 04:04:00 +0800 | [diff] [blame] | 46 | molestie. Proin blandit ornare dui, a tempor nisl accumsan in. Praesent a consequat felis. Morbi metus diam, auctor in auctor vel, feugiat id odio. Curabitur ex ex, |
| 47 | dictum quis auctor quis, suscipit id lorem. Aliquam vestibulum dolor nec enim vehicula, porta tristique augue tincidunt. Vivamus ut gravida est. Sed pellentesque, dolor |
| 48 | vitae tristique consectetur, neque lectus pulvinar dui, sed feugiat purus diam id lectus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per |
| 49 | inceptos himenaeos. Maecenas feugiat velit in ex ultrices scelerisque id id neque. |
| 50 | |
| 51 | Phasellus sed nisi in augue sodales pulvinar ut et leo. Pellentesque eget leo vitae massa bibendum sollicitudin. Curabitur erat lectus, congue quis auctor sed, aliquet |
| 52 | bibendum est. Ut porta ultricies turpis at maximus. Cras non lobortis justo. Duis rutrum magna sed velit facilisis, et sagittis metus laoreet. Pellentesque quam ligula, |
| 53 | dapibus vitae mauris quis, dapibus cursus leo. Sed sit amet condimentum eros. Nulla vestibulum enim sit amet lorem pharetra, eu fringilla nisl posuere. Sed tristique non |
| 54 | nibh at viverra. Vivamus sed accumsan lacus, nec pretium eros. Mauris elementum arcu eu risus fermentum, tempor ullamcorper neque aliquam. Sed tempor in erat eu |
| 55 | suscipit. In euismod in libero in facilisis. Donec sagittis, odio et fermentum dignissim, risus justo pretium nibh, eget vestibulum lectus metus vel lacus. |
| 56 | |
| 57 | Quisque feugiat, magna ac feugiat ullamcorper, augue justo consequat felis, ut fermentum arcu lorem vitae ligula. Quisque iaculis tempor maximus. In quis eros ac tellus |
| 58 | aliquam placerat quis id tellus. Donec non gravida nulla. Morbi faucibus neque sed faucibus aliquam. Sed accumsan mattis nunc, non interdum justo. Cras vitae facilisis |
| 59 | leo. Fusce sollicitudin ultrices sagittis. Maecenas eget massa id lorem dignissim ultrices non et ligula. Pellentesque aliquam mi ac neque tempus ornare. Morbi non enim |
| 60 | vulputate quam ullamcorper finibus id non neque. Quisque malesuada commodo lorem, ut ornare velit iaculis rhoncus. Mauris vel maximus ex. |
| 61 | |
| 62 | Morbi eleifend blandit diam, non vulputate ante iaculis in. Donec pellentesque augue id enim suscipit, eget suscipit lacus commodo. Ut vel ex vitae elit imperdiet |
| 63 | vulputate. Nunc eu mattis orci, ut pretium sem. Nam vitae purus mollis ante tempus malesuada a at magna. Integer mattis lectus non luctus lobortis. In a cursus quam, |
| 64 | eget faucibus sem. |
| 65 | |
| 66 | Donec vitae condimentum nisi, non efficitur massa. Praesent sed mi in massa sollicitudin iaculis. Pellentesque a libero ultrices, sodales lacus eu, ornare dui. In |
| 67 | laoreet est nec dolor aliquam consectetur. Integer iaculis felis venenatis libero pulvinar, ut pretium odio interdum. Donec in nisi eu dolor varius vestibulum eget vel |
| 68 | nunc. Morbi a venenatis quam, in vehicula justo. Nam risus dui, auctor eu accumsan at, sagittis ac lectus. Mauris iaculis dignissim interdum. Cras cursus dapibus auctor. |
| 69 | Donec sagittis massa vitae tortor viverra vehicula. Mauris fringilla nunc eu lorem ultrices placerat. Maecenas posuere porta quam at semper. Praesent eu bibendum eros. |
| 70 | Nunc congue sollicitudin ante, sollicitudin lacinia magna cursus vitae. |
| 71 | "; |