archive/tar

2018-12-28  本文已影响0人  stevenlife
package main

import (
    "bytes"
    "archive/tar"
    "log"
    "io"
    "fmt"
    "os"
)

func main() {
    // 创建一个缓冲区来写入我们的存档。
    buf := new(bytes.Buffer)
    // 创建一个新的tar存档。
    tw := tar.NewWriter(buf)
    // 将一些文件添加到存档中。
    var files = []struct {
        Name, Body string
    }{{"readme.txt", "This archive contains some text files."},
        {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
        {"todo.txt", "Get animal handling license."},}
    for _, file := range files {
        hdr := &tar.Header{
            Name: file.Name,
            Mode: 0600,
            Size: int64(len(file.Body)),}
        if err := tw.WriteHeader(hdr); err != nil {
            log.Fatalln(err)
        }
        if _, err := tw.Write([]byte(file.Body)); err != nil {
            log.Fatalln(err)
        }
    } // 确保在Close时检查错误。
    if err := tw.Close(); err != nil {
        log.Fatalln(err)
    } // 打开tar档案以供阅读。
    r := bytes.NewReader(buf.Bytes())
    tr := tar.NewReader(r) // 迭代档案中的文件。
    for {
        hdr, err := tr.Next()
        if err == io.EOF { // tar归档结束break}
            if err != nil {
                log.Fatalln(err)
            }
            fmt.Printf("Contents of %s:\n", hdr.Name)
            if _, err := io.Copy(os.Stdout, tr); err != nil {
                log.Fatalln(err)
            }
            fmt.Println()
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读