Heim > Backend-Entwicklung > Golang > Wie vermeide ich Fehler beim Öffnen von Dateien beim Dekomprimieren von tar.gz-Dateien in Go?

Wie vermeide ich Fehler beim Öffnen von Dateien beim Dekomprimieren von tar.gz-Dateien in Go?

Patricia Arquette
Freigeben: 2024-11-03 20:29:29
Original
1019 Leute haben es durchsucht

How to Avoid File Open Errors When Decompressing tar.gz Files in Go?

So dekomprimieren Sie die tar.gz-Datei in Go

Das Dekomprimieren von tar.gz-Dateien ist für das Extrahieren von Daten und Ordnern aus Archiven von entscheidender Bedeutung. In Go umfasst dieser Vorgang die Verwendung der Pakete archive/tar und compress/gzip. Es muss jedoch unbedingt sichergestellt werden, dass der verwendete Code die Dateien erfolgreich extrahiert, ohne dass Fehler auftreten.

Verbesserte Lösung:

Der bereitgestellte verbesserte Code behebt das Problem, wenn eine Datei geöffnet wird Der Fehler tritt aufgrund zu vieler geöffneter Dateien auf. Dazu wird die defer outFile.Close()-Anweisung an das Ende jeder case-Anweisung verschoben, die eine Datei zum Schreiben öffnet. Dadurch wird sichergestellt, dass die Datei sofort nach dem Kopieren des Inhalts geschlossen wird, wodurch die Ansammlung geöffneter Dateien und der daraus resultierende Fehler verhindert werden.

<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() // Close the file immediately after copying

        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

Fazit:

Dieser aktualisierte Code Dekomprimiert die tar.gz-Dateien korrekt und stellt sicher, dass alle geöffneten Dateien ordnungsgemäß geschlossen werden, wodurch Fehler durch zu viele geöffnete Dateien vermieden werden. Mit dieser Erweiterung können Go-Entwickler mühelos Daten und Ordner aus tar.gz-Archiven extrahieren.

Das obige ist der detaillierte Inhalt vonWie vermeide ich Fehler beim Öffnen von Dateien beim Dekomprimieren von tar.gz-Dateien in Go?. 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