Maison >développement back-end >Golang >Comment extraire un fichier TAR.GZ dans Go ?

Comment extraire un fichier TAR.GZ dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 20:54:29499parcourir

How to Extract a TAR.GZ File in Go?

Décompresser un fichier TAR.GZ dans Go

Décompresser un fichier TAR.GZ dans Go implique de lire le fichier compressé à l'aide du package gzip et analyser son contenu sous forme d'archive tar à l'aide du package archive/tar. Voici une version corrigée du code :

<code class="go">package main

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>

Le principal problème avec le code d'origine était qu'il ne fermait pas le fichier de sortie après y avoir écrit. Cela pourrait entraîner une corruption des données et l'erreur « trop de fichiers ouverts ».

Améliorations du code corrigé :

  • Le code corrigé ferme le fichier de sortie. après y avoir écrit.
  • Il imprime un message d'erreur sur la console si le fichier ne peut pas être ouvert.

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!

Déclaration:
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