写工具时通常会生成ZIP文件,一般来说就传相对路径和内容就好。但是今天发现一个细节。还需要将文件所在的目录也要传进去。虽然现在的解压软件都支持不传,但是如果解压的代码不规范就会造成保存路径不存在,因为父级目录不存在:

let file: File = File::create(zip_path).unwrap();  
let mut writer: ZipWriter<File> = ZipWriter::new(file);
let options = zip::write::FileOptions::default()
    .compression_method(zip::CompressionMethod::Deflated);

// 因为这里已经将所有目录 遍历好。目录结构已经不存在的,只能通过文件路径反向还原,并使用map去重
let mut dirMap:HashMap<String, bool> = HashMap::new();

// .... 中间省略循环遍历
// 先将文件目录结构创建
let arr:Vec<&str> = path.split('/').collect();
let mut tmp_dir: String = String::new();
for i in 0..(arr.len() - 1) {
    let tmp = arr[i];
    tmp_dir.push('/');
    tmp_dir.push_str(tmp);
    if dirMap.contains_key(&tmp_dir){ // 缓存保存过的目录
        continue;
    }
    dirMap.insert(tmp_dir.clone(), true);
    writer.add_directory(&tmp_dir, options).unwrap();
}

// 将文件写入ZIP
let mut buffer = Vec::new();
let mut file = File::open(&tmp_path).unwrap();
file.read_to_end(&mut buffer).unwrap();
writer.start_file(path, options).unwrap();
writer.write_all(&buffer).unwrap();

标签: rust, zip, 目录

已有 28 条评论

  1. 3333333333333333333333333333333

  2. 3333333333333333333333333333333

  3. 3333333333333333333333333333333

  4. 111111111111111

  5. 121111111111111

  6. 1211111188811111

  7. 叼茂SEObfbikes.com

  8. 叼茂SEO.bfbikes.com

  9. 看的我热血沸腾啊https://www.jiwenlaw.com/

  10. 看的我热血沸腾啊https://www.237fa.com/

  11. 想想你的文章写的特别好https://www.ea55.com/

  12. 不错不错,我喜欢看 https://www.ea55.com/

  13. 可以的

  14. 你的文章内容非常精彩,让人回味无穷。http://www.hlykjgs.com

  15. 文章的确不错啊https://www.cscnn.com/

  16. 文章的确不错啊https://www.cscnn.com/

  17. 《奇妙世纪》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/39666.html

  18. 你的文章让我学到了很多知识,非常感谢。 http://www.55baobei.com/98WRjJDfDc.html

  19. 真棒!

  20. 看到你的文章,我仿佛感受到了生活中的美好。 https://www.4006400989.com/qyvideo/42306.html

  21. 《咱老张是谁》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/113482.html

  22. 《特工008》动作片高清在线免费观看:https://www.jgz518.com/xingkong/95665.html

  23. 看到你的文章,我仿佛感受到了生活中的美好。 https://www.4006400989.com/qyvideo/8359.html

  24. 你的文章充满了创意,真是让人惊喜。 http://www.55baobei.com/z7nyZ48nCq.html

  25. 你的文章让我感受到了快乐,每天都要来看一看。 http://www.55baobei.com/yJ8gPoYzYC.html

  26. 《侯门主母本小姐不当了》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/153593.html

  27. 《张飞审瓜》动画片高清在线免费观看:https://www.jgz518.com/xingkong/135661.html

  28. 《僵尸校园》韩国剧高清在线免费观看:https://www.jgz518.com/xingkong/41215.html

添加新评论