代码之家  ›  专栏  ›  技术社区  ›  Graham Slick

在字节位置读取文件

go
  •  1
  • Graham Slick  · 技术社区  · 6 年前

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   peterSO    6 年前

    Package os

    import "os"
    

    func (*File) Seek

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

    Seek设置要偏移的下一个读或写文件的偏移量, 文件,1表示相对于当前偏移量,2表示相对于


    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
    
    $