Cara Nyahmampat Fail tar.gz dalam Go
Dalam soalan ini, pengguna cuba menyahmampat fail yang dipanggil file.tar. gz, yang mengandungi folder, menggunakan Go. Mereka telah menghadapi ralat menyatakan "terlalu banyak fail terbuka" semasa cuba mencipta fail.
Kod yang disediakan pada dasarnya mengekstrak kandungan fail tar.gz, tetapi terdapat isu kecil dalam pengendalian biasa fail (TypeReg). Kesilapannya terletak pada tidak menutup fail output, outFile, selepas menyalin kandungannya. Kegagalan untuk menutup fail dengan anggun mengakibatkan ralat "terlalu banyak fail terbuka" kerana fail kekal terbuka walaupun selepas fungsi kembali.
Untuk membetulkannya, kami boleh mengubah suai fungsi ExtractTarGz untuk menutup fail output selepas menyalin kandungannya. Berikut ialah kod yang dikemas kini:
<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 output file after copying its contents 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>
Kod yang diubah suai termasuk panggilan ke outFile.Close() untuk menutup fail output secara eksplisit selepas menyalin kandungannya. Ini memastikan bahawa fail ditutup dan dikeluarkan dengan betul, menghalang ralat "terlalu banyak fail terbuka".
Atas ialah kandungan terperinci Mengapakah saya mendapat ralat \'terlalu banyak fail terbuka\' semasa menyahmampat fail tar.gz dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!