Golang Go语言中求教读取文件并记录偏移量的正确姿势
目前是
f.Seek(size,0)
bfRd := bufio.NewReader(f)
line, _, err := bfRd.ReadLine()
offset +=len(string(line))+2
...省略
文件内容这样
aaaaa
bbbbb
cccc
程序计算的偏移量会大于实际文件 2 个字节,因此只能读取结束后减 2 。有其他更简洁的方式么?
Golang Go语言中求教读取文件并记录偏移量的正确姿势
更多关于Golang Go语言中求教读取文件并记录偏移量的正确姿势的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
看文档,ReadLine tries to return a single line, not including the end-of-line bytes.
Most callers should use ReadBytes(’\n’) or ReadString(’\n’) instead or use a Scanner.
更多关于Golang Go语言中求教读取文件并记录偏移量的正确姿势的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
ok
这 2 字节是换行吧?
在Go语言中读取文件并记录偏移量,你可以使用标准库中的os
和io
包来实现。以下是一个基本的示例,展示如何正确读取文件内容并追踪当前的偏移量:
- 打开文件:使用
os.Open
函数打开文件,返回一个*os.File
指针。 - 创建读取器:使用
bufio.NewReader
创建一个带缓冲的读取器,提高读取效率。 - 读取文件:使用读取器的
Read
方法读取文件内容,同时记录偏移量。
示例代码如下:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
offset := int64(0)
buffer := make([]byte, 1024)
for {
n, err := reader.Read(buffer)
if err != nil {
fmt.Println("Error reading file:", err)
break
}
offset += int64(n)
fmt.Printf("Read %d bytes, offset now at %d\n", n, offset)
// 处理读取到的数据
}
fmt.Println("Final offset:", offset)
}
在这个示例中,我们每次读取数据后都会更新偏移量。注意,当读取到文件末尾时,Read
方法会返回一个错误,此时应处理错误并退出循环。这个基本框架可以根据你的需求进行扩展和修改。