Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Nyahmampat Fail tar.gz dalam Pergi Tanpa Melebihi Had Terbuka Fail?
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>
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!