Heim >Backend-Entwicklung >Golang >Wie komprimiere ich ein Verzeichnis in Go, ohne den Stammordner einzubeziehen?
Inhalt ohne den Stammordner komprimieren
In Go ist es beim Komprimieren eines Verzeichnisses üblich, den Stammordner als Teil des Archivs einzuschließen . Es gibt jedoch Szenarien, in denen Sie möglicherweise den Stammordner ausschließen möchten, um sicherzustellen, dass nur die Inhalte extrahiert werden.
Um dies zu erreichen, erfordert die von Ihnen bereitgestellte Zipit-Funktion eine kleine Änderung:
header.Name = strings.TrimPrefix(path, source)
Im Originalcode fügt die Zeile header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source)) den Basisverzeichnisnamen hinzu (z. B. „dir1“) zum Dateinamen im Archiv. Wenn Sie dies durch den obigen Code ersetzen, wird der Name des Basisverzeichnisses weggelassen.
Wenn Sie also die „.zip“-Datei extrahieren, erhalten Sie den Inhalt ohne den Ordner „dir1“ als Stammverzeichnis Verzeichnis.
// Modified Zipit function 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 } // Remove the base directory name 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 } // Trim the base directory name from the filename header.Name = strings.TrimPrefix(path, source) 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 }
Wenn Sie nun Zipit aufrufen mit:
Zipit("dir1/", "dir1.zip")
Die resultierende „.zip“-Datei enthält nur den Inhalt von „dir1“ ohne den Ordner „dir1“ als Stammverzeichnis beim Extrahieren.
Das obige ist der detaillierte Inhalt vonWie komprimiere ich ein Verzeichnis in Go, ohne den Stammordner einzubeziehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!