Masalah: Mengezip fail dalam folder menghasilkan struktur yang diekstrak yang merangkumi akar folder, sedangkan hasil yang diinginkan adalah untuk mengekstrak fail tanpa akar folder.
Percubaan Kod:
Kod berikut ialah percubaan untuk mengezip struktur direktori:
func Zipit(source, target string) error { zipfile, err := os.Create(target) ... header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source)) ... }
Penyelesaian masalah:
Dalam kod yang disediakan, isunya terletak pada baris di mana baseDir ditambahkan pada tajuk.Nama. Untuk mengecualikan folder akar daripada struktur yang diekstrak, alih keluar baseDir daripada nama fail.
Penyelesaian:
Gantikan baris berikut:
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
dengan:
header.Name = strings.TrimPrefix(path, source)
Alternatif Pendekatan:
Daripada mengubah suai nama pengepala secara manual, anda juga boleh menggunakan pendekatan alternatif berikut untuk mengecualikan folder akar semasa pengekstrakan:
walker := filepath.Walk(source, func(path string, info os.FileInfo, err error) error { // Ignore the root directory if info.IsDir() && path == source { return filepath.SkipDir } ... })
Atas ialah kandungan terperinci Bagaimana untuk Zip Fail Di Dalam Folder Tanpa Termasuk Folder Root dalam Arkib?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!