gpt4 book ai didi

file-io - 戈朗 : Why does the compress/gzip Read function not read file contents?

转载 作者:IT王子 更新时间:2023-10-29 01:59:20 26 4
gpt4 key购买 nike

我制作了一个文本文件,然后用 gzip 压缩了它。然后,我运行以下 go 程序来读取该压缩文件的内容。

package main

import (
"compress/gzip"
"fmt"
"os"
)

func main() {
handle, err := os.Open("zipfile.gz")
if err != nil {
fmt.Println("[ERROR] File Open:", err)
}
defer handle.Close()

zipReader, err := gzip.NewReader(handle)
if err != nil {
fmt.Println("[ERROR] New gzip reader:", err)
}
defer zipReader.Close()

var fileContents []byte
bytesRead, err := zipReader.Read(fileContents)
if err != nil {
fmt.Println("[ERROR] Reading gzip file:", err)
}
fmt.Println("[INFO] Number of bytes read from the file:", bytesRead)
fmt.Printf("[INFO] Uncompressed contents: '%s'\n", fileContents)
}

我得到的响应如下:

$ go run zipRead.go
[INFO] Number of bytes read from the file: 0
[INFO] Uncompressed contents: ''

为什么我没有从文件中获取任何内容?

我已经在 OS X 和 Ubuntu 上创建了 zip 文件。我在 OS X 和 Ubuntu 上构建了这个 go 程序,结果相同。

最佳答案

io.Reader.Read最多只能读取 len(b) 个字节。由于您的 fileContents 为 nil,因此其长度为 0。分配一些空间供其读取:

fileContents := make([]byte, 1024) // Read by 1 KiB.
bytesRead, err := zipReader.Read(fileContents)
if err != nil {
fmt.Println("[ERROR] Reading gzip file:", err)
}
fileContents = fileContents[:bytesRead]

如果你想读取整个文件,你必须多次使用Read,或者使用像ioutil.ReadAll这样的东西。 (这可能对大文件不利)。

关于file-io - 戈朗 : Why does the compress/gzip Read function not read file contents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32018130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com