记录一下对文件进行压缩的实现,这里只列出了外围代码
/*
函数名:makeTarGzip
制作压缩包,进步在线传输速率
参 数:encFile , 密文文件
signFile , 签名文件
返回值:压缩后文件名
错误信息
创立工夫及创建者:2021-06-15 Yuan_sr
*/
func makeTarGzip(encFile, signFile string) (string, error){
tarGzipFileName = "example.tar.gz"
// file write
fw, err := os.Create(tarGzipFileName)
if err != nil {return "", err}
defer fw.Close()
// gzip write
gw := gzip.NewWriter(fw)
defer gw.Close()
// tar write
tw := tar.NewWriter(gw)
defer tw.Close()
// 关上文件夹
dir, err := os.Open("./")
if err != nil {return "", err}
defer dir.Close()
// 读取文件列表
fis, err := dir.Readdir(0)
if err != nil {return "", err}
for _, fi := range fis{if fi.IsDir(){continue}
if fi.Name() == encFile || fi.Name() == signFile{ // 去掉这个条件能够实现该目录下所有文件的压缩
ef, err := os.Open(dir.Name() + "/" + fi.Name())
if err != nil {return "", err}
defer ef.Close()
// 信息头
h := new(tar.Header)
h.Name = fi.Name()
h.Size = fi.Size()
h.Mode = int64(fi.Mode())
h.ModTime = fi.ModTime()
// 写信息头
err = tw.WriteHeader(h)
if err != nil {return "", err}
_, err = io.Copy(tw, ef)
if err != nil {return "", err}
}
}
return tarGzipFileName, err
}
/*
函数名:unTarGzip
文件解压缩
参 数:tarGzipFile , 待解压缩文件
返回值:错误信息
创立工夫及创建者:2021-06-15 Yuan_sr
*/
func unTarGzip (tarGzipFile string) error {fr, err := os.Open(tarGzipFile)
if err != nil {return err}
defer fr.Close()
gr, err := gzip.NewReader(fr)
if err != nil {return err}
defer gr.Close()
tr := tar.NewReader(gr)
for {h, err := tr.Next()
if err == io.EOF {break}
if err != nil {return err}
fw, err := os.OpenFile(h.Name, os.O_CREATE | os.O_WRONLY, 0755)
if err != nil {return err}
defer fw.Close()
_, err = io.Copy(fw, tr)
if err != nil {return err}
}
return nil
}