1 Star 0 Fork 0

wosylf/龙飞工具仓库

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
zip.go 3.10 KB
一键复制 编辑 原始数据 按行查看 历史
longfei 提交于 1年前 . 优化一下结构
package xutil
import (
"archive/zip"
"fmt"
"io"
"os"
"path"
"path/filepath"
"strings"
)
func F打包目录(src_dir string, zip_file_name string) {
// 预防:旧文件无法覆盖
os.RemoveAll(zip_file_name)
// 创建:zip文件
zipfile, _ := os.Create(zip_file_name)
defer zipfile.Close()
// 打开:zip文件
archive := zip.NewWriter(zipfile)
defer archive.Close()
// 遍历路径信息
filepath.Walk(src_dir, func(path string, info os.FileInfo, _ error) error {
// 如果是源路径,提前进行下一个遍历
if path == src_dir {
return nil
}
// 获取:文件头信息
header, _ := zip.FileInfoHeader(info)
header.Name = strings.TrimPrefix(path, src_dir+`/`)
// 判断:文件是不是文件夹
if info.IsDir() {
header.Name += `/`
} else {
// 设置:zip的文件压缩算法
header.Method = zip.Deflate
}
// 创建:压缩包头部信息
writer, _ := archive.CreateHeader(header)
if !info.IsDir() {
file, _ := os.Open(path)
defer file.Close()
io.Copy(writer, file)
}
return nil
})
}
func F新打包目录(src_dir string, pathname string, 是否铺平 ...int) {
// 预防:旧文件无法覆盖
os.RemoveAll(pathname)
// 创建:zip文件
zipfile, _ := os.Create(pathname)
defer zipfile.Close()
// 打开:zip文件
archive := zip.NewWriter(zipfile)
defer archive.Close()
// 遍历路径信息
filepath.Walk(src_dir, func(path string, info os.FileInfo, _ error) error {
//fmt.Println("srcdir", src_dir, "path", path)
// 如果是源路径,提前进行下一个遍历
if path == src_dir {
return nil
}
if info.Name() == pathname {
return nil
}
if filepath.Ext(info.Name()) == filepath.Ext(pathname) {
return nil
}
// 获取:文件头信息
header, _ := zip.FileInfoHeader(info)
if len(是否铺平) == 0 {
header.Name = path
} else {
header.Name = filepath.Base(path)
}
//header.Name = strings.TrimPrefix(path, src_dir)
// 判断:文件是不是文件夹
if info.IsDir() {
header.Name += `/`
} else {
// 设置:zip的文件压缩算法
header.Method = zip.Deflate
}
// 创建:压缩包头部信息
writer, _ := archive.CreateHeader(header)
if !info.IsDir() {
file, _ := os.Open(path)
defer file.Close()
io.Copy(writer, file)
}
return nil
})
}
// 传文件路径与名字,会直接在路径的目录压缩并删除原文件
func F单独压缩一个文件(pat string) {
fileNameWithSuffix := path.Base(pat)
//fmt.Println("fil", fileNameWithSuffix)
pat1 := strings.TrimSuffix(pat, path.Ext(pat)) + ".zip"
zipfile, _ := os.Create(pat1)
defer zipfile.Close()
// 打开:zip文件
archive := zip.NewWriter(zipfile)
defer archive.Close()
w1, err := archive.Create(fileNameWithSuffix)
if err != nil {
fmt.Println("压缩文件异常", err.Error())
return
}
f1, err := os.Open(pat)
if err != nil { //如果文件不存在,这里会报错
return
}
if _, err := io.Copy(w1, f1); err != nil {
fmt.Println("压缩文件异常", err.Error())
}
f1.Close()
//删除文件
err = os.RemoveAll(pat)
if err != nil {
fmt.Println("err", err.Error())
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wosylf/ltool.git
git@gitee.com:wosylf/ltool.git
wosylf
ltool
龙飞工具仓库
8da2cfa8e297

搜索帮助