Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(97)

Delta Between Two Patch Sets: src/pkg/archive/tar/example_test.go

Issue 7220048: code review 7220048: archive/tar: Add reader and writer code example. (Closed)
Left Patch Set: diff -r 1af88804d685 https://code.google.com/p/go Created 11 years, 2 months ago
Right Patch Set: diff -r 445186a20cee https://code.google.com/p/go Created 11 years, 1 month ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « no previous file | src/pkg/archive/tar/reader.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 package tar_test 1 package tar_test
mikio 2013/02/04 03:26:25 copyright?
2 2
3 import ( 3 import (
4 "archive/tar" 4 "archive/tar"
5 "bytes" 5 "bytes"
6 "fmt" 6 "fmt"
7 "io" 7 "io"
8 "log" 8 "log"
9 "os" 9 "os"
10 ) 10 )
11 11
12 func Example() { 12 func Example() {
13 » w := new(bytes.Buffer) 13 » // Create a buffer to write our archive to.
14 » // Write to tar archive. 14 » buf := new(bytes.Buffer)
15 » tw := tar.NewWriter(w) 15
16 » names := []string{"testdata/small.txt", "testdata/small2.txt"} 16 » // Create a new tar archive.
17 » for _, name := range names { 17 » tw := tar.NewWriter(buf)
18 » » fr, err := os.Open(name) 18
19 » » if err != nil { 19 » // Add some files to the archive.
20 » var files = []struct {
21 » » Name, Body string
22 » }{
23 » » {"readme.txt", "This archive contains some text files."},
24 » » {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
25 » » {"todo.txt", "Get animal handling licence."},
26 » }
27 » for _, file := range files {
28 » » hdr := &tar.Header{
29 » » » Name: file.Name,
30 » » » Size: int64(len(file.Body)),
31 » » }
32 » » if err := tw.WriteHeader(hdr); err != nil {
20 log.Fatalln(err) 33 log.Fatalln(err)
21 } 34 }
22 » » defer fr.Close() 35 » » if _, err := tw.Write([]byte(file.Body)); err != nil {
23 » » fi, err := fr.Stat()
24 » » if err != nil {
25 » » » log.Fatalln(err)
26 » » }
27 » » hdr, err := tar.FileInfoHeader(fi, "")
28 » » if err != nil {
29 » » » log.Fatalln(err)
30 » » }
31 » » if err = tw.WriteHeader(hdr); err != nil {
32 » » » log.Fatalln(err)
33 » » }
34 » » if _, err = io.Copy(tw, fr); err != nil {
35 log.Fatalln(err) 36 log.Fatalln(err)
36 } 37 }
37 } 38 }
38 » tw.Close() 39 » // Make sure to check the error on Close.
40 » if err := tw.Close(); err != nil {
41 » » log.Fatalln(err)
42 » }
39 43
40 » // Read from tar archive. 44 » // Open the tar archive for reading.
41 » r := bytes.NewReader(w.Bytes()) 45 » r := bytes.NewReader(buf.Bytes())
42 tr := tar.NewReader(r) 46 tr := tar.NewReader(r)
47
48 // Iterate through the files in the archive.
43 for { 49 for {
44 hdr, err := tr.Next() 50 hdr, err := tr.Next()
45 if err == io.EOF { 51 if err == io.EOF {
46 // end of tar archive 52 // end of tar archive
47 break 53 break
48 } 54 }
49 if err != nil { 55 if err != nil {
50 log.Fatalln(err) 56 log.Fatalln(err)
51 } 57 }
52 » » fmt.Println("name:", hdr.Name) 58 » » fmt.Printf("Contents of %s:\n", hdr.Name)
53 » » io.Copy(os.Stdout, tr) 59 » » if _, err := io.Copy(os.Stdout, tr); err != nil {
60 » » » log.Fatalln(err)
61 » » }
54 fmt.Println() 62 fmt.Println()
55 } 63 }
64
56 // Output: 65 // Output:
57 » // name: small.txt 66 » // Contents of readme.txt:
58 » // Kilts 67 » // This archive contains some text files.
59 » // name: small2.txt 68 » // Contents of gopher.txt:
60 » // Google.com 69 » // Gopher names:
70 » // George
71 » // Geoffrey
72 » // Gonzo
73 » // Contents of todo.txt:
74 » // Get animal handling licence.
61 } 75 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b