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
Lepaskan: 2024-11-25 13:16:14
asal
567 orang telah melayarinya

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)
Salin selepas log masuk

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
}
Salin selepas log masuk

Sekarang, apabila anda memanggil Zipit menggunakan:

Zipit("dir1/", "dir1.zip")
Salin selepas log masuk

".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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan