go语言制作的zip压缩程序_Golang

可以压缩文件和目录。

package main
import (
  "archive/zip"
  "bytes"
  "fmt"
  "io/ioutil"
  "os"
  "path/filepath"
)
func main() {
  if err := compress(`gopkg`, `gopkg.zip`); err != nil {
    fmt.Println(err)
  }
}
// 参数frm可以是文件或目录,不会给dst添加.zip扩展名
func compress(frm, dst string) error {
  buf := bytes.NewBuffer(make([]byte, 0, 10*1024*1024)) // 创建一个读写缓冲
  myzip := zip.NewWriter(buf)              // 用压缩器包装该缓冲
  // 用Walk方法来将所有目录下的文件写入zip
  err := filepath.Walk(frm, func(path string, info os.FileInfo, err error) error {
    var file []byte
    if err != nil {
      return filepath.SkipDir
    }
    header, err := zip.FileInfoHeader(info) // 转换为zip格式的文件信息
    if err != nil {
      return filepath.SkipDir
    }
    header.Name, _ = filepath.Rel(filepath.Dir(frm), path)
    if !info.IsDir() {
      // 确定采用的压缩算法(这个是内建注册的deflate)
      header.Method = 8
      file, err = ioutil.ReadFile(path) // 获取文件内容
      if err != nil {
        return filepath.SkipDir
      }
    } else {
      file = nil
    }
    // 上面的部分如果出错都返回filepath.SkipDir
    // 下面的部分如果出错都直接返回该错误
    // 目的是尽可能的压缩目录下的文件,同时保证zip文件格式正确
    w, err := myzip.CreateHeader(header) // 创建一条记录并写入文件信息
    if err != nil {
      return err
    }
    _, err = w.Write(file) // 非目录文件会写入数据,目录不会写入数据
    if err != nil {    // 因为目录的内容可能会修改
      return err     // 最关键的是我不知道咋获得目录文件的内容
    }
    return nil
  })
  if err != nil {
    return err
  }
  myzip.Close()        // 关闭压缩器,让压缩器缓冲中的数据写入buf
  file, err := os.Create(dst) // 建立zip文件
  if err != nil {
    return err
  }
  defer file.Close()
  _, err = buf.WriteTo(file) // 将buf中的数据写入文件
  if err != nil {
    return err
  }
  return nil
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索go语言
zip压缩
golang zip压缩、go语言和golang、golang go语言、go语言为什么叫golang、c语言 zip压缩算法,以便于您获取更多的相关知识。

时间: 2024-10-31 05:45:21

go语言制作的zip压缩程序_Golang的相关文章

用PHP制作zip压缩程序

刚在网上找的一个类.点击下载类文件(zip压缩文件,2.25K)$z = new PHPZip(); //新建立一个zip的类 方法一:$z -> Zip("", "out1.zip"); //添加当前目录和子目录下的所有档案 方法二:$files=array('1.txt','gb.txt');$files[]='5.txt';$z -> Zip($files, "out2.zip"); //添加文件列表 方法三:$z ->

go语言制作一个gif动态图_Golang

如题,关键不是图怎么样,而是说,go可以拿来实现动态图验证码,加上go支持cgi.fcgi,完全可以做个exe拿去增补现有的服务器么. ball.go package main import ( "github.com/hydra13142/cube" "github.com/hydra13142/geom" "github.com/hydra13142/paint" "image" "image/color/pal

C++Zip压缩解压缩示例(支持递归压缩)_C 语言

第三方函数.头文件.测试工程下载地址:http://pan.baidu.com/s/1gSfKo 复制代码 代码如下: // 文件名: ZipFunction.h#pragma once#include "zip.h"#include "unzip.h" namespace ZipUtils{    // ---------------------------------------------------------------------------------

Long Range ZIP 0.608发布 压缩程序

Long Range ZIP 0.608该版本更快的rzip阶段通过使用选择数据访问功能.完成bash脚本不再是默认安装,因此不会与分配的bash实现包冲突.更多的非Linux平台上编译的修复.. LRZIP ( Long Range ZIP ) 是压缩程序,可以达到非常高的压缩率和速度较大的文件时使用.它使用zpaq和最大的压缩,最高速度的zpaq和LZMA算法压缩算法相结合,和长期范围rzip冗余减少.其目的是规模与内存大小的增加,进一步提高压缩.无论是从规模的一个选择,优化和速度都允许更好

利用Java实现zip压缩/解压缩

压缩 利用Java实现zip压缩/解压缩(作者: 2000年07月06日 13:30) 由于网络带宽有限,所以数据文件的压缩有利于数据在Internet上的快速传输,同时也节 省服务器的外存空间. Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩.网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry.ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法. zip压缩文件结构:一个zip文件由多个entry组

java基础---->Zip压缩的使用(转)

java中提供了对压缩格式的数据流的读写.它们封装到现成的IO 类中,以提供压缩功能.下面我们开始java中压缩文件的使用.   目录导航: 关于压缩的简要说明 GZIP压缩文件的使用 ZIP压缩文件的使用 GZIP与ZIP压缩的比较 友情链接   关于压缩的简要说明 一. Java中有着压缩的类: CheckedInputStream GetCheckSum()为任何InputStream 产生校验和(不仅是解压) CheckedOutputStream GetCheckSum()为任何Out

在JAVA中解决Zip压缩乱码问题

Java自带的zip压缩工具,可以让我们方便的压缩与解压缩,但是就是默认编码UTF-8没法改(至少我没找到,如果谁找到了,别忘记告诉我,我也不想用第三方的Jar包),虽然使用Java写打压缩与解压缩没问题,但是中文字符在WinRAR里面全是乱码. 所以我采用了Ant包中的压缩功能. 多余的话不多说了,代码才是硬道理,直接上代码吧.顺便说一下,该程序依赖于ant包,但是如果你只用到压缩,你可以用WinRAR打开这个Ant.jar文件,删除org.apache.tools.zip包以外的所有clas

C语言编写的bmp读写程序

C语言编写的bmp读写程序 建议先把bmp的数据存储格式了解下  [cpp] view plaincopy   <span style="font-size:16px;">#include "Windows.h"   #include "stdio.h"   #include "string.h"   #include "malloc.h"      unsigned char *pBmpBuf

用java语言制作球星管理系统

问题描述 用java语言制作球星管理系统 要求有一个主界面,可以实现NBA球星的姓名,所属球队,号码等基本信息的查询,修改,删除,添加等,把信息放在文件中,在java程序中读取文件中的信息.新人首帖求帮助 解决方案 http://www.codeforge.cn/read/71921/deletestu.java__html 解决方案二: http://www.codeforge.cn/read/71921/deletestu.java__htmlhttp://www.taodocs.com/p