func writeZipFile(dir string, targetFile *os.File) error { isEmpty, err := fileutils.IsDirEmpty(dir) if err != nil { return err } if isEmpty { return errors.NewEmptyDirError(dir) } writer := zip.NewWriter(targetFile) defer writer.Close() appfiles := ApplicationFiles{} return appfiles.WalkAppFiles(dir, func(fileName string, fullPath string) error { fileInfo, err := os.Stat(fullPath) if err != nil { return err } header, err := zip.FileInfoHeader(fileInfo) if err != nil { return err } if runtime.GOOS == "windows" { header.SetMode(header.Mode() | 0700) } header.Name = filepath.ToSlash(fileName) header.Method = zip.Deflate if fileInfo.IsDir() { header.Name += "/" } zipFilePart, err := writer.CreateHeader(header) if err != nil { return err } if fileInfo.IsDir() { return nil } file, err := os.Open(fullPath) if err != nil { return err } defer file.Close() _, err = io.Copy(zipFilePart, file) if err != nil { return err } return nil }) }
func writeZipFile(dir string, targetFile *os.File) error { isEmpty, err := fileutils.IsDirEmpty(dir) if err != nil { return err } if isEmpty { return errors.NewEmptyDirError(dir) } writer := zip.NewWriter(targetFile) defer writer.Close() appfiles := ApplicationFiles{} return appfiles.WalkAppFiles(dir, func(fileName string, fullPath string) error { fileInfo, err := os.Stat(fullPath) if err != nil { return err } header, err := zip.FileInfoHeader(fileInfo) if err != nil { return err } header.Name = filepath.ToSlash(fileName) if fileInfo.IsDir() { header.Name += "/" } zipFilePart, err := writer.CreateHeader(header) if err != nil { return err } if fileInfo.IsDir() { return nil } return fileutils.CopyPathToWriter(fullPath, zipFilePart) }) }