Heim > Backend-Entwicklung > Golang > Wie komprimiere ich ein Verzeichnis in Go, ohne den Stammordner einzubeziehen?

Wie komprimiere ich ein Verzeichnis in Go, ohne den Stammordner einzubeziehen?

Linda Hamilton
Freigeben: 2024-11-25 13:16:14
Original
572 Leute haben es durchsucht

How to Zip a Directory in Go Without Including the Root Folder?

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)
Nach dem Login kopieren

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
}
Nach dem Login kopieren

Wenn Sie nun Zipit aufrufen mit:

Zipit("dir1/", "dir1.zip")
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage