-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathzip.go
More file actions
130 lines (109 loc) · 2.24 KB
/
zip.go
File metadata and controls
130 lines (109 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package main
import (
"archive/zip"
"fmt"
"io"
"io/ioutil"
"os"
)
func write() {
// cria um buffer para gravar o arquivo
// buf := new(bytes.Buffer)
file, err := os.Create("arquivo.zip")
if err != nil {
fmt.Println(err)
}
defer file.Close()
// cria um arquivo zip
zipFile := zip.NewWriter(file)
// alguns arquivos para `zipar`
var files = []struct{ Name, Content string }{
{"file1.txt", "file 1\ntxt example"},
{"file2.txt", "file 2\ntxt example"},
{"file3.txt", "file 3\ntxt example"},
{"file4.txt", "file 4\ntxt example"},
}
for _, file := range files {
// criar um arquivo
f, err := zipFile.Create(file.Name)
if err != nil {
fmt.Println(err)
}
// escreve o conteudo no arquivo
_, err = f.Write([]byte(file.Content))
if err != nil {
fmt.Println(err)
}
}
ff, _ := zipFile.Create("array.go")
data, _ := ioutil.ReadFile("array.go") // data []byte
ff.Write(data)
// termina a gravação do arquivo zip, gravando o diretório central
defer zipFile.Close()
if err != nil {
fmt.Println(err)
}
}
func read() {
// abre o arquivo zip
r, err := zip.OpenReader("arquivo.zip")
if err != nil {
fmt.Println(err)
}
defer r.Close()
// percorre todos os arquivo no zip
for _, f := range r.File {
fmt.Printf("Arquivo: %s\n", f.Name)
rc, err := f.Open()
if err != nil {
fmt.Println(err)
}
_, err = io.CopyN(os.Stdout, rc, 3000)
if err != nil {
fmt.Println(err)
}
defer rc.Close()
}
}
func descomprimir() {
// abre arquivo .zip
zipFile, err := zip.OpenReader("arquivo.zip")
if err != nil {
fmt.Println(err)
return
}
defer zipFile.Close()
for i, file := range zipFile.File {
fmt.Printf("descomprimindo arquivo #%02d %v\n", i+1, file.Name)
// abre reader para ler arquivo de dentro do zip
reader, err := file.Open()
if err != nil {
fmt.Println(err)
return
}
defer reader.Close()
var f *os.File
// abre arquivo de destino
f, err = os.OpenFile(
file.Name,
os.O_WRONLY|os.O_CREATE|os.O_TRUNC,
file.Mode())
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
// grava arquivo de destino
_, err = io.Copy(f, reader)
if err != nil {
fmt.Println(err)
return
}
}
}
func ZipTest() {
fmt.Println("Teste")
write()
read()
descomprimir()
}