Go 建立帶密碼的zip壓縮包

liy36發表於2024-09-10

建立帶密碼的zip壓縮包

package main

import (
	"io"
	"log"
	"os"
	"path/filepath"

	"github.com/alexmullins/zip"
)

func init() {
	log.SetFlags(log.Lshortfile | log.LstdFlags)
}

func main() {
	fzip, err := os.Create("./main.zip")
	if err != nil {
		log.Fatalln(err)
	}
	defer fzip.Close()

	zipw := zip.NewWriter(fzip)
	defer zipw.Close()
	header := &zip.FileHeader{
		Name:   filepath.Base("main.go"),
		Method: zip.Deflate,
		Flags:  0x800, // 設定檔名稱編碼為UTF-8,避免在Windows上解壓後檔名出現亂碼
	}
	header.SetPassword("password")
	w, err := zipw.CreateHeader(header)
	if err != nil {
		log.Fatalln(err)
	}
	// 開啟要新增到壓縮包中的原檔案
	f, err := os.Open("./main.go")
	if err != nil {
		log.Fatalln(err)
	}

	// 從檔案中讀取資料到壓縮包中
	if _, err = io.Copy(w, f); err != nil {
		log.Fatalln(err)
	}

	// 寫入到儲存中
	if err := zipw.Flush(); err != nil {
		log.Fatalln(err)
	}
}


相關文章