文件压缩的一种实现
記錄一下對文件進行壓縮的實現,這里只列出了核心代碼
/* 函數名: makeTarGzip制作壓縮包,提高在線傳輸速率 參 數:encFile , 密文文件signFile , 簽名文件 返回值:壓縮后文件名錯誤信息 創建時間及創建者:2021-06-15 Yuan_sr */ func makeTarGzip(encFile, signFile string) (string, error){tarGzipFileName = "example.tar.gz"// file writefw, err := os.Create(tarGzipFileName)if err != nil {return "", err}defer fw.Close()// gzip writegw := gzip.NewWriter(fw)defer gw.Close()// tar writetw := 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 }總結
- 上一篇: 密码技术应用--SM2文件签名验签
- 下一篇: sh256sum、xxd、base64联