有效地从文件中读取前两个字节 - Golang

时间:2017-02-12 20:06:42

标签: file go

我正在尝试使用Go找到一个从文件中读取前两个字节的好方法。

我当前目录中有一些.zip个文件,与其他文件混合在一起。

我想遍历目录中的所有文件,并检查前两个字节是否包含正确的.zip标识符,即50 4B

使用标准库完成此操作的好方法是什么,而不必阅读整个文件?

浏览我设法找到的io包中的可用功能:

func LimitReader(r Reader, n int64) Reader

这似乎符合我的描述,它从Reader读取(如何获得Reader?)但在n字节后停止。因为我对Go很新,所以我不确定如何去做。

2 个答案:

答案 0 :(得分:5)

您可以通过打开文件来获取初始读者。对于2个字节,我不会使用LimitReader。只需用io.ReadFull读取2个字节就更容易了。

r, err := os.Open(file)
if err != nil {
    return err
}

defer r.Close()

var header [2]byte
n, err := io.ReadFull(r, header[:])
if err != nil {
    return err
}

答案 1 :(得分:-1)

您也可以使用普通的旧 Read 方法:

package main
import "os"

func main() {
   f, err := os.Open("a.go")
   if err != nil {
      panic(err)
   }
   defer f.Close()
   b := make([]byte, 2)
   f.Read(b)
   os.Stdout.Write(append(b, '\n'))
}

https://pkg.go.dev/io#Reader