Comprimir contenido dentro de una carpeta sin la carpeta raíz
El requisito es crear un archivo ZIP que contenga los archivos dentro de un directorio, excluyendo el directorio mismo como carpeta raíz tras la extracción.
El fragmento proporcionado intenta lograr esto configurando el nombre del encabezado usando la siguiente línea:
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
Sin embargo, este código agrega el directorio base (por ejemplo, "dir1") al nombre del encabezado, lo que da como resultado un archivo donde los archivos se anidan dentro de la estructura del directorio.
Para solucionar este problema, la línea debe reemplazarse con lo siguiente:
header.Name = strings.TrimPrefix(path, source)
Esto elimina el directorio base del nombre del encabezado , asegurándose de que los archivos se extraigan sin la estructura del directorio.
El código modificado se vería así:
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) } }
Este código comprime efectivamente el contenido dentro del directorio "dir1" sin incluir el directorio en sí en el archivo ZIP.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3