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
Lepaskan: 2024-11-04 15:19:02
asal
886 orang telah melayarinya

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

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!

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