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
| package main
import ( "archive/zip" "fmt" "io" "log" "os" "path/filepath" "strings" )
func new_zip(files []string) { fout, err2 := os.OpenFile("test2.zip", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err2 != nil { log.Fatal(err2) } defer fout.Close()
w := zip.NewWriter(fout) defer w.Close()
for _, file := range files { fin, err := os.Open(file) if err != nil { log.Fatal(err) } defer fin.Close()
f, _ := w.Create(file) for { buf := make([]byte, 4096) n, err2 := fin.Read(buf) if err2 == io.EOF { break } f.Write(buf[:n]) } }
}
func unzip(zipfile string) { r, err := zip.OpenReader(zipfile) if err != nil { log.Fatal(err) } defer r.Close() dest_dir := strings.Trim(zipfile, ".zip") err2 := os.Mkdir(dest_dir, 0755) if err2 != nil { log.Fatal(err2) } for _, f := range r.File { if f.Mode().IsDir() { fmt.Println("跳过目录", f.Name) continue } f2, err3 := os.Create(filepath.Join(dest_dir, f.Name)) if err3 != nil { log.Fatal(err3) } rc, err := f.Open() defer rc.Close() if err != nil { log.Fatal(err) } io.Copy(f2, rc)
} }
func main() { unzip("test2.zip") }
|