Читать файл в байтовом местоположении - PullRequest
0 голосов
/ 24 ноября 2018

Мне нужно прочитать файл в определенном месте, заданном смещением в байтах.

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

Как этого добиться, если это возможно, не читая весь файл в памяти?

1 Ответ

0 голосов
/ 24 ноября 2018

Пакет os

import "os"

func (* File) Seek

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

Seek устанавливает смещение дляnext Чтение или запись файла в смещение, интерпретируется в соответствии с тем, откуда: 0 означает относительно начала файла, 1 означает относительно текущего смещения, а 2 означает относительно конца.Возвращает новое смещение и ошибку, если есть.Поведение Seek для файла, открытого с помощью O_APPEND, не указано.


Пакет 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

$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...