Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Zip Direktori dalam Go Tanpa Termasuk Folder Root?

Bagaimana untuk Zip Direktori dalam Go Tanpa Termasuk Folder Root?

Linda Hamilton
Linda Hamiltonasal
2024-11-25 13:16:14568semak imbas

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

Mengzip Kandungan Tanpa Folder Root

Dalam Go, apabila mengezip direktori, adalah perkara biasa untuk memasukkan folder akar sebagai sebahagian daripada arkib . Walau bagaimanapun, terdapat senario di mana anda mungkin ingin mengecualikan folder akar untuk memastikan hanya kandungan yang diekstrak.

Untuk mencapai ini, fungsi Zipit yang anda sediakan memerlukan pengubahsuaian kecil:

header.Name = strings.TrimPrefix(path, source)

Dalam kod asal, pengepala baris.Nama = filepath.Join(baseDir, strings.TrimPrefix(path, source)) menambah nama direktori asas (cth., "dir1") pada nama fail dalam arkib. Dengan menggantikan ini dengan kod di atas, nama direktori asas ditinggalkan.

Akibatnya, apabila anda mengekstrak fail ".zip", anda akan memperoleh kandungan tanpa folder "dir1" sebagai akar direktori.

// 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
}

Sekarang, apabila anda memanggil Zipit menggunakan:

Zipit("dir1/", "dir1.zip")

".zip" yang terhasil fail hanya akan mengandungi kandungan "dir1" tanpa folder "dir1" sebagai direktori akar selepas pengekstrakan.

Atas ialah kandungan terperinci Bagaimana untuk Zip Direktori dalam Go Tanpa Termasuk Folder Root?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn