Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "archive/tar"
- "bytes"
- "compress/gzip"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- )
- func main() {
- modemBinDir := "bin"
- f, err := os.Create("test-file-handle.tar.gz")
- if err != nil {
- panic(err)
- }
- buff := new(bytes.Buffer)
- mw := io.MultiWriter(buff, f)
- // gzw := gzip.NewWriter(buff)
- gzw := gzip.NewWriter(mw)
- defer gzw.Close()
- tw := tar.NewWriter(gzw)
- defer tw.Close()
- if err := filepath.Walk(modemBinDir, func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return err
- }
- header, err := tar.FileInfoHeader(info, path)
- if err != nil {
- return err
- }
- header.Name = path
- fmt.Println("Header name:", header.Name)
- if err := tw.WriteHeader(header); err != nil {
- return err
- }
- //Can't write folders, only their paths
- if !info.Mode().IsRegular() {
- return nil
- }
- f, err := os.Open(path)
- if err != nil {
- return err
- }
- if n, err := io.Copy(tw, f); err != nil {
- return err
- } else {
- fmt.Println("Wrote", n, "bytes to tar archive")
- }
- f.Close()
- return nil
- }); err != nil {
- panic(err)
- }
- ioutil.WriteFile("test-buffer.tar.gz", buff.Bytes(), 0644)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement