| // Copyright 2013 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package tar_test |
| |
| import ( |
| "archive/tar" |
| "bytes" |
| "fmt" |
| "io" |
| "log" |
| "os" |
| ) |
| |
| func Example() { |
| // Create a buffer to write our archive to. |
| buf := new(bytes.Buffer) |
| |
| // Create a new tar archive. |
| tw := tar.NewWriter(buf) |
| |
| // Add some files to the archive. |
| 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) |
| } |
| } |
| // Make sure to check the error on Close. |
| if err := tw.Close(); err != nil { |
| log.Fatalln(err) |
| } |
| |
| // Open the tar archive for reading. |
| r := bytes.NewReader(buf.Bytes()) |
| tr := tar.NewReader(r) |
| |
| // Iterate through the files in the archive. |
| for { |
| hdr, err := tr.Next() |
| if err == io.EOF { |
| // end of tar archive |
| 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() |
| } |
| |
| // Output: |
| // Contents of readme.txt: |
| // This archive contains some text files. |
| // Contents of gopher.txt: |
| // Gopher names: |
| // George |
| // Geoffrey |
| // Gonzo |
| // Contents of todo.txt: |
| // Get animal handling license. |
| } |