Maison > développement back-end > Golang > Comment décompresser les fichiers tar.gz dans Go sans dépasser les limites d'ouverture des fichiers ?

Comment décompresser les fichiers tar.gz dans Go sans dépasser les limites d'ouverture des fichiers ?

Linda Hamilton
Libérer: 2024-11-04 15:19:02
original
884 Les gens l'ont consulté

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

Décompresser les fichiers tar.gz dans Go

La décompression des fichiers tar.gz dans Go implique l'utilisation des packages archive/tar et compress/gzip. Bien qu'un exemple de code ait été fourni, il a rencontré des problèmes liés aux limites d'ouverture des fichiers.

Pour résoudre ce problème, nous proposons ci-dessous une solution mise à jour, qui modifie la façon dont le fichier de sortie est fermé.

<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>
Copier après la connexion

En fermant le fichier de sortie immédiatement après avoir copié le contenu du lecteur tar, nous libérons les ressources du descripteur de fichier, qui provoquaient auparavant les erreurs liées au dépassement des limites d'ouverture des fichiers. Ce code mis à jour devrait décompresser avec succès les fichiers tar.gz dans Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal