1
lxz6597863 2022-01-05 17:00:12 +08:00 1
```
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) } } ``` |
2
sciel OP @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 } ``` |
3
tyrantZhao 2022-01-10 11:53:03 +08:00
@sciel 这个貌似不对,stat.Size()是字节数
|
4
sciel OP @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) } } ``` |
5
sciel OP 最后一行
|
6
tyrantZhao 2022-01-10 16:10:38 +08:00
@sciel 删除最后一个字符这么做可以,但是如果要删除最后一行,貌似没有特别高效的办法
|