Inhalte innerhalb eines Ordners ohne den Stammordner komprimieren
Die Anforderung besteht darin, eine ZIP-Datei zu erstellen, die die Dateien in einem Verzeichnis enthält, mit Ausnahme der Verzeichnis selbst als Stammordner beim Extrahieren.
Das bereitgestellte Snippet versucht dies zu erreichen, indem es den Headernamen mithilfe der folgenden Zeile festlegt:
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
Dieser Code fügt jedoch das Basisverzeichnis hinzu ( z. B. „dir1“) zum Header-Namen, was zu einem Archiv führt, in dem die Dateien innerhalb der Verzeichnisstruktur verschachtelt sind.
Um dieses Problem zu beheben, sollte die Zeile durch Folgendes ersetzt werden:
header.Name = strings.TrimPrefix(path, source)
Dadurch wird das Basisverzeichnis aus dem Header-Namen entfernt und sichergestellt, dass die Dateien ohne die Verzeichnisstruktur extrahiert werden.
Der geänderte Code würde so aussehen:
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) } }
Dieser Code Zippt effektiv den Inhalt im Verzeichnis „dir1“, ohne das Verzeichnis selbst in die ZIP-Datei aufzunehmen.
Das obige ist der detaillierte Inhalt vonWie komprimiere ich Ordnerinhalte ohne den Stammordner in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!