记录一下对文件进行压缩的实现,这里只列出了核心代码
/*
函数名: 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
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。