Heim > Backend-Entwicklung > Golang > Wie dekomprimiere ich tar.gz-Dateien in Go, ohne die Dateiöffnungsgrenzen zu überschreiten?

Wie dekomprimiere ich tar.gz-Dateien in Go, ohne die Dateiöffnungsgrenzen zu überschreiten?

Linda Hamilton
Freigeben: 2024-11-04 15:19:02
Original
886 Leute haben es durchsucht

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

Tar.gz-Dateien in Go dekomprimieren

Das Dekomprimieren von tar.gz-Dateien in Go erfordert die Verwendung der Pakete archive/tar und compress/gzip. Während ein Beispielcode bereitgestellt wurde, traten Probleme im Zusammenhang mit den Dateiöffnungsbeschränkungen auf.

Um dieses Problem zu beheben, schlagen wir unten eine aktualisierte Lösung vor, die die Art und Weise ändert, wie die Ausgabedatei geschlossen wird.

<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>
Nach dem Login kopieren

Indem wir die Ausgabedatei unmittelbar nach dem Kopieren des Inhalts aus dem TAR-Reader schließen, geben wir Dateideskriptorressourcen frei, die zuvor die Fehler im Zusammenhang mit der Überschreitung der Grenzwerte für offene Dateien verursachten. Dieser aktualisierte Code sollte tar.gz-Dateien in Go erfolgreich dekomprimieren.

Das obige ist der detaillierte Inhalt vonWie dekomprimiere ich tar.gz-Dateien in Go, ohne die Dateiöffnungsgrenzen zu überschreiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage