go如何更新文本文件中某一行的内容

kekemuyu · · 5408 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

这是代码实现,有个问题是更改某一行的内容后会影响下一个的内容.请大神帮我看一下 ```go package main import ( "bufio" "errors" "fmt" "io" "os" "strings" ) func main() { fi, err := os.OpenFile("test.txt", os.O_RDWR, os.ModePerm) if err != nil { fmt.Println(err) return } defer fi.Close() reader := bufio.NewReader(fi) lineCnt := 0 seekP := 0 for { bs, _, err := reader.ReadLine() if err == io.EOF { fmt.Println(errors.New("读取完成")) break } lineCnt = len(bs) + 2 //ReadLine 返回读取的长度不包含换行\r\n if strings.Contains(string(bs), "hello") { delBytes := make([]byte, 0) //编辑包含hello的行,需要先在该行写入ascii的127即删除符号,再写入新内容 for i := 0; i < lineCnt; i++ { delBytes = append(delBytes, 127) } fi.WriteAt(delBytes, int64(seekP)) newStr := "hi\r\n" fi.WriteAt([]byte(newStr), int64(seekP)) //在该行写入新内容 lineCnt = len([]byte(newStr)) //该行长度是新内容的长度 } seekP += lineCnt } } ``` 文本文件原始: ``` skdflksdlkfs sjdfksdfksf skjdkfj hello skjdfksjdfksjdkf 123 123 123 ``` 被程序修改后,可以看到修改行的下一行被加入了很多空格 ``` skdflksdlkfs sjdfksdfksf hi 123 123 123 ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5408 次点击  
加入收藏 微博
5 回复  |  直到 2022-07-21 16:46:38
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传