Golang Go语言中求教读取文件并记录偏移量的正确姿势

发布于 1周前 作者 nodeper 来自 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


这 2 字节是换行吧?

在Go语言中读取文件并记录偏移量,你可以使用标准库中的osio包来实现。以下是一个基本的示例,展示如何正确读取文件内容并追踪当前的偏移量:

  1. 打开文件:使用os.Open函数打开文件,返回一个*os.File指针。
  2. 创建读取器:使用bufio.NewReader创建一个带缓冲的读取器,提高读取效率。
  3. 读取文件:使用读取器的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方法会返回一个错误,此时应处理错误并退出循环。这个基本框架可以根据你的需求进行扩展和修改。

回到顶部