设为首页 加入收藏

TOP

golang 用tar打包文件或文件夹(一)
2017-09-30 13:22:58 】 浏览:10427
Tags:golang tar 打包 文件 文件夹

打包文件用到了tar包,其中tar包的用法可以参考API 

golang提供了个函数用来遍历文件夹 filepath.Walk

函数具体描述如下:

func Walk(root string, walkFn WalkFunc) error  root是用遍历的文件夹

type WalkFunc

type WalkFunc func(path string, info os.FileInfo, err error) error path参数是返回遍历的文件路径和文件信息

在使用中如代码中蓝色部分,通过该方法呢,我们可以对文件和文件夹的操作更加熟悉,其中用到了

os.Create 用来创建文件,返回文件信息和错误信息  func Create(name string) (file *File, err error)
os.Remove 用来删除文件,返回错误信息  func Remove(name string) error
os.Stat   用来返回文件具体信息,返回文件信息和错误信息   func (f *File) Stat() (fi FileInfo, err error)
os.Open   用来打开文件,返回文件信息和错误信息    func Open(name string) (file *File, err error)
io.Copy   复职文件信息到Writer 

func Copy(dst Writer, src Reader) (written int64, err error)
func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error)
os.Mkdir 用来创建文件夹,返回错误信息  func Mkdir(name string, perm FileMode) error

strings.TrimPrefix(targetpath, directory) 这个方法获取具体的文件路径相对目标文件夹的相对路径,也是在tar包中创建文件夹的相对路径

 

package main
 
  
import (
    "archive/tar"
    "fmt"
    "io"
    "os"
    "path/filepath"
    "strings"
)
 
  
/***生成***/
 
  
func createTar(filesource, filetarget string, deleteIfExist bool) error {
    //create tar file with targetfile name
    tarfile, err := os.Create(filetarget)
 
  
    if err != nil {
        // if file is exist then delete file
        if err == os.ErrExist {
            if err := os.Remove(filetarget); err != nil {
                fmt.Println(err)
                return err
            }
        } else {
            fmt.Println(err)
            return err
        }
    }
    defer tarfile.Close()
 
  
    tarwriter := tar.NewWriter(tarfile)
 
  
    sfileInfo, err := os.Stat(filesource)
    if err != nil {
        fmt.Println(err)
        return err
    }
 
  
    if !sfileInfo.IsDir() {
        return tarFile(filetarget, filesource, sfileInfo, tarwriter)
 
  
    } else {
        return tarFolder(filesource, tarwriter)
    }
    return nil
}
 
  
func tarFile(directory string, filesource string, sfileInfo os.FileInfo, tarwriter
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇go语言学习之路六:接口详解 下一篇我读《通过Go来处理每分钟达百万..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目