From d73dbbf73c5b5f285e51cb123d5cc52753c7954f Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Fri, 19 Jun 2020 22:47:56 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9AAdd=20file=20handling=20method?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/file.go | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 tools/file.go diff --git a/tools/file.go b/tools/file.go new file mode 100644 index 00000000..9d3ea3fb --- /dev/null +++ b/tools/file.go @@ -0,0 +1,114 @@ +package tools + +import ( + "archive/zip" + "bytes" + "io" + "log" + "os" + "path/filepath" + "strings" +) + +func PathExists(path string) (bool, error) { + _, err := os.Stat(path) + if err == nil { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return false, err +} + +func PathCreate(dir string) error { + return os.MkdirAll(dir, os.ModePerm) +} + +func FileCreate(content bytes.Buffer, name string) { + file, err := os.Create(name) + if err != nil { + log.Println(err) + } + file.WriteString(content.String()) + //for i := 0; i < len(content); i++ { + // //写入byte的slice数据 + // file.Write(content) + // //写入字符串 + // // + //} + file.Close() +} + +func PathRemove(name string) { + err := os.RemoveAll(name) + if err != nil { + log.Println(err) + } +} + +func FileRemove(name string) { + err := os.Remove(name) + if err != nil { + log.Println(err) + } +} + +func FileZip(dst, src string,notContPath string) (err error) { + //创建准备写入的文件 + fw, err := os.Create(dst) + defer fw.Close() + if err != nil { + return err + } + + // 通过 fw 来创建 zip.Write + zw := zip.NewWriter(fw) + defer func() { + // 检测一下是否成功关闭 + if err := zw.Close(); err != nil { + log.Fatalln(err) + } + }() + return filepath.Walk(src, func(path string, fi os.FileInfo, errBack error) (err error) { + if errBack != nil { + return errBack + } + + fh, err := zip.FileInfoHeader(fi) + if err != nil { + return + } + + fh.Name = strings.TrimPrefix(path, string(filepath.Separator)) + + if fi.IsDir() { + fh.Name += "/" + } + fh.Name = strings.Replace(fh.Name, notContPath, "", -1) + + w, err := zw.CreateHeader(fh) + if err != nil { + return + } + + if !fh.Mode().IsRegular() { + return nil + } + + fr, err := os.Open(path) + defer fr.Close() + if err != nil { + return + } + + n, err := io.Copy(w, fr) + if err != nil { + return + } + + log.Printf("成功压缩文件: %s, 共写入了 %d 个字符的数据\n", path, n) + + return nil + }) +}