func extractAndWriteFile(f *zip.File, dest string) error { rc, err := f.Open() if err != nil { return err } defer rc.Close() path := filepath.Join(dest, f.Name) if isDir(f.Name) { os.MkdirAll(path, f.Mode()) } else { f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) if err != nil { return err } defer f.Close() _, err = io.Copy(f, rc) if err != nil { return err } } return nil }
func extractAndWriteFile(i int, f *zip.File) error { var isDir bool rc, err := f.Open() if err != nil { fmt.Println("Error : ", err) return err } defer func() { if err := rc.Close(); err != nil { fmt.Println("Error : ", err) return } }() path := filepath.Join(unzipDest, f.Name) if f.FileInfo().IsDir() { os.MkdirAll(path, f.Mode()) isDir = true } else { f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) if err != nil { fmt.Println("Error : ", err) return err } defer func() { if err := f.Close(); err != nil { fmt.Println("Error : ", err) return } }() _, err = io.Copy(f, rc) if err != nil { fmt.Println("Error : ", err) return err } } if i == 0 { basePath = path } createTree(i+1, path, isDir) return nil }
func extractFile(f *zip.File, dest string) error { frc, err := f.Open() if err != nil { return err } defer frc.Close() path := filepath.Join(dest, f.Name) if f.FileInfo().IsDir() { os.MkdirAll(path, f.Mode()) } else { f, err := os.Create(path) if err != nil { return err } defer f.Close() _, err = io.Copy(f, frc) if err != nil { return err } } return nil }