Bagaimana untuk Zip Kandungan Folder Tanpa Folder Root dalam Go?

Susan Sarandon
Lepaskan: 2024-11-18 05:03:02
asal
749 orang telah melayarinya

How to Zip Folder Content Without the Root Folder in Go?

Mengzip Kandungan dalam Folder tanpa Folder Root

Keperluan adalah untuk mencipta fail ZIP yang mengandungi fail dalam direktori, tidak termasuk direktori itu sendiri sebagai folder akar semasa pengekstrakan.

Coretan yang disediakan cuba mencapai ini dengan menetapkan nama pengepala menggunakan baris berikut:

header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
Salin selepas log masuk

Walau bagaimanapun, kod ini menambah direktori asas ( cth., "dir1") kepada nama pengepala, menghasilkan arkib yang mana fail bersarang dalam struktur direktori.

Untuk menangani isu ini, baris itu hendaklah digantikan dengan yang berikut:

header.Name = strings.TrimPrefix(path, source)
Salin selepas log masuk

Ini mengalih keluar direktori asas daripada nama pengepala, memastikan fail diekstrak tanpa struktur direktori.

Kod yang diubah suai akan kelihatan seperti ini:

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

Kod ini berkesan mengezip kandungan dalam direktori "dir1" tanpa memasukkan direktori itu sendiri dalam fail ZIP.

Atas ialah kandungan terperinci Bagaimana untuk Zip Kandungan Folder Tanpa Folder Root dalam Go?. 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