Maison >développement back-end >Golang >Comment compresser le contenu d'un dossier sans le dossier racine dans Go ?
Zipper le contenu dans un dossier sans le dossier racine
L'exigence est de créer un fichier ZIP contenant les fichiers dans un répertoire, à l'exclusion du répertoire lui-même comme dossier racine lors de l'extraction.
L'extrait fourni tente d'y parvenir en définissant le nom d'en-tête à l'aide de ce qui suit line:
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
Cependant, ce code ajoute le répertoire de base (par exemple, "dir1") au nom de l'en-tête, ce qui donne lieu à une archive où les fichiers sont imbriqués dans la structure de répertoires.
Pour résoudre ce problème, la ligne doit être remplacée par ce qui suit :
header.Name = strings.TrimPrefix(path, source)
Cela supprime le répertoire de base du nom d'en-tête, garantissant ainsi que les fichiers sont extrait sans la structure des répertoires.
Le code modifié ressemblerait à ceci :
import ( "archive/zip" "fmt" "io" "os" "path/filepath" ) func Zipit(source, target string) error { zipfile, err := os.Create(target) if err != nil { return err } defer zipfile.Close() archive := zip.NewWriter(zipfile) defer archive.Close() info, err := os.Stat(source) if err != nil { return nil } filepath.Walk(source, func(path string, info os.FileInfo, err error) error { if err != nil { return err } header, err := zip.FileInfoHeader(info) if err != nil { return err } if info.IsDir() { header.Name += "/" } else { header.Method = zip.Deflate } writer, err := archive.CreateHeader(header) if err != nil { return err } if info.IsDir() { return nil } file, err := os.Open(path) if err != nil { return err } defer file.Close() _, err = io.Copy(writer, file) return err }) return err } func main() { err := Zipit("path/dir1" +"/", "test"+".zip") if err != nil { fmt.Println(err) } }
Ce code compresse efficacement le contenu du répertoire "dir1" sans inclure le répertoire lui-même dans le fichier ZIP .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!