【发布时间】:2020-09-16 23:15:06
【问题描述】:
如何分段读取二进制文件? (阅读一些,快进,阅读更多,...)
我尝试了fn (f &File) read_bytes(size int) 函数,但很惊讶它总是从前面读取。
我们真的需要重新实现 C File 结构(V 也重新实现)来跟踪当前文件位置吗?
【问题讨论】:
标签: vlang
如何分段读取二进制文件? (阅读一些,快进,阅读更多,...)
我尝试了fn (f &File) read_bytes(size int) 函数,但很惊讶它总是从前面读取。
我们真的需要重新实现 C File 结构(V 也重新实现)来跟踪当前文件位置吗?
【问题讨论】:
标签: vlang
您可以使用File.read_bytes_at。您需要自己跟踪位置:
import os
path :='v.exe'
size :=1024*256
mut f := os.open(path) or {println(err) return}
for pos := 0;; pos += size {
arr := f.read_bytes_at(size, pos)
println(arr.len)
if arr.len == 0 {break}
}
f.close()
对我来说,这给出了以下输出:
262144
262144
262144
262144
186094
0
更新: 在 git master 我添加了一个函数,可以将数据读入缓冲区以避免在每次调用时分配:
mut arr := []byte{len: size}
...
nread := f.read_bytes_into(pos, arr) or {
panic(err)
}
if nread == 0 {break}
【讨论】: