我需要在特定位置读取文件,由字节偏移量给出。
filePath := "test_file.txt"
byteOffset := 6
// Read file
在不读取内存中整个文件的情况下,如何实现?
答案 0 :(得分:1)
import "os"
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
Seek设置下一个文件读取或写入的偏移量为偏移量, 根据何处解释:0表示相对于原点 文件,1表示相对于当前偏移量,2表示相对于当前偏移量 结束。它返回新的偏移量和错误(如果有)。行为 未指定使用O_APPEND打开的文件的搜索次数。
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
$