写工具时通常会生成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, 目录

已有 48 条评论

  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

  29. 哈哈哈,写的太好了https://www.lawjida.com/

  30. 哈哈哈,写的太好了https://www.lawjida.com/

  31. 建议补充发展中国家案例,避免视角局限。

  32. 文字流畅如丝,语言优美动人,读来令人心旷神怡。

  33. 美洲大陆

  34. 雨和你的故事

  35. 活埋求生

  36. 阴宅捉迷藏

  37. 梦想无限

  38. 搭秋千的人

  39. 一息尚存

  40. 女英雄飞车夺宝

  41. 忘记你的方法

  42. 通灵少年

  43. 引力弹弓

  44. 山狗

  45. 乌托邦

  46. 食人猫大报复

  47. 萨尔沙

  48. 城市猎人

添加新评论