在字节位置读取文件

时间:2018-11-24 14:48:09

标签: go

我需要在特定位置读取文件,由字节偏移量给出。

filePath := "test_file.txt"
byteOffset := 6
// Read file

在不读取内存中整个文件的情况下,如何实现?

1 个答案:

答案 0 :(得分:1)

  

Package os

import "os"
     

func (*File) Seek

func (f *File) Seek(offset int64, whence int) (ret int64, err error)
     

Seek设置下一个文件读取或写入的偏移量为偏移量,   根据何处解释:0表示相对于原点   文件,1表示相对于当前偏移量,2表示相对于当前偏移量   结束。它返回新的偏移量和错误(如果有)。行为   未指定使用O_APPEND打开的文件的搜索次数。


  

Package io

import "io" 
     

查找原始值。

const (
    SeekStart   = 0 // seek relative to the origin of the file
    SeekCurrent = 1 // seek relative to the current offset
    SeekEnd     = 2 // seek relative to the end 
)

例如,

package main

import (
    "fmt"
    "io"
    "os"
)

func main() {
    filePath := "test.file"
    byteOffset := 6
    f, err := os.Open(filePath)
    if err != nil {
        panic(err)
    }
    defer f.Close()
    _, err = f.Seek(int64(byteOffset), io.SeekStart)
    if err != nil {
        panic(err)
    }
    buf := make([]byte, 16)
    n, err := f.Read(buf[:cap(buf)])
    buf = buf[:n]
    if err != nil {
        if err != io.EOF {
            panic(err)
        }
    }
    fmt.Printf("%s\n", buf)
}

输出:

$ cat test.file
0123456789
$ go run seek.go
6789

$