Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Nyahmampat Fail tar.gz dalam Pergi Tanpa Melebihi Had Terbuka Fail?

Bagaimana untuk Nyahmampat Fail tar.gz dalam Pergi Tanpa Melebihi Had Terbuka Fail?

Linda Hamilton
Linda Hamiltonasal
2024-11-04 15:19:02885semak imbas

How to Decompress tar.gz Files in Go Without Exceeding File Open Limits?

Menyahmampat Fail tar.gz dalam Go

Menyahmampat fail tar.gz dalam Go melibatkan penggunaan pakej arkib/tar dan kompres/gzip. Semasa kod sampel diberikan, ia menghadapi isu yang berkaitan dengan had pembukaan fail.

Untuk menangani perkara ini, kami mencadangkan penyelesaian yang dikemas kini di bawah, yang mengubah cara fail output ditutup.

<code class="go">import (
    "archive/tar"
    "compress/gzip"
    "fmt"
    "io"
    "log"
    "os"
)

func ExtractTarGz(gzipStream io.Reader) {
    uncompressedStream, err := gzip.NewReader(gzipStream)
    if err != nil {
        log.Fatal("ExtractTarGz: NewReader failed")
    }

    tarReader := tar.NewReader(uncompressedStream)

    for true {
        header, err := tarReader.Next()

        if err == io.EOF {
            break
        }

        if err != nil {
            log.Fatalf("ExtractTarGz: Next() failed: %s", err.Error())
        }

        switch header.Typeflag {
        case tar.TypeDir:
            if err := os.Mkdir(header.Name, 0755); err != nil {
                log.Fatalf("ExtractTarGz: Mkdir() failed: %s", err.Error())
            }
        case tar.TypeReg:
            outFile, err := os.Create(header.Name)
            if err != nil {
                log.Fatalf("ExtractTarGz: Create() failed: %s", err.Error())
            }
            if _, err := io.Copy(outFile, tarReader); err != nil {
                log.Fatalf("ExtractTarGz: Copy() failed: %s", err.Error())
            }
            outFile.Close()

        default:
            log.Fatalf(
                "ExtractTarGz: uknown type: %s in %s",
                header.Typeflag,
                header.Name)
        }

    }
}

func main() {
    r, err := os.Open("./file.tar.gz")
    if err != nil {
        fmt.Println("error")
    }
    ExtractTarGz(r)
}</code>

Dengan menutup fail output serta-merta selepas menyalin kandungan daripada pembaca tar, kami membebaskan sumber deskriptor fail, yang sebelum ini menyebabkan ralat berkaitan dengan melebihi had fail terbuka. Kod yang dikemas kini ini sepatutnya berjaya menyahmampat fail tar.gz dalam Go.

Atas ialah kandungan terperinci Bagaimana untuk Nyahmampat Fail tar.gz dalam Pergi Tanpa Melebihi Had Terbuka Fail?. 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