golang 如何删除一个文件的最后一行?

2022-01-05 16:27:29 +08:00
 sciel
2249 次点击
所在节点    Go 编程语言
6 条回复
lxz6597863
2022-01-05 17:00:12 +08:00
```
package main

import (
"bufio"
"log"
"os"
)

func main() {
f, err := os.OpenFile("1.txt", os.O_RDWR, 0666)
if err != nil {
log.Fatal(err)
}
defer f.Close()
delim := "\n"
var offset int64
r := bufio.NewReader(f)
for {
offset--
_, err := f.Seek(offset, os.SEEK_END)
if err != nil {
log.Println(err)
break
}
r.Reset(f)
b, err := r.Peek(1)
if err != nil {
log.Println(err)
break
}
if string(b) == delim {
break
}
}
info, err := f.Stat()
if err != nil {
log.Fatal(err)
}
err = f.Truncate(info.Size() + offset)
if err != nil {
log.Fatal(err)
}
}

```
sciel
2022-01-05 17:16:07 +08:00
@lxz6597863 多谢,简化了一下 haha

```
func delLastLine(err error, file *os.File) error {
stat, err := file.Stat()
err = file.Truncate(stat.Size() - 1)
if err != nil {
panic(err)
}
return err
}
```
tyrantZhao
2022-01-10 11:53:03 +08:00
@sciel 这个貌似不对,stat.Size()是字节数
sciel
2022-01-10 15:54:24 +08:00
@tyrantZhao

我只要删除文件最后一个字符就好了。

```
func delLastLine(c TemplateConfig) {
file, err := gfile.OpenFile(c.RootPath+c.PathCmd, os.O_WRONLY, 0600)
if err != nil {
panic(err)
}

stat, err := file.Stat()
if err = file.Truncate(stat.Size() - 2); err != nil {
panic(err)
}
if err = file.Close(); err != nil {
panic(err)
}
}
```
sciel
2022-01-10 15:55:08 +08:00
最后一行
tyrantZhao
2022-01-10 16:10:38 +08:00
@sciel 删除最后一个字符这么做可以,但是如果要删除最后一行,貌似没有特别高效的办法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX