<br>package main<br><br>import (<br> "bufio"<br> "log"<br> "os"<br>)<br><br>func main() {<br> f, err := os.OpenFile("1.txt", os.O_RDWR, 0666)<br> if err != nil {<br> log.Fatal(err)<br> }<br> defer f.Close()<br> delim := "\n"<br> var offset int64<br> r := bufio.NewReader(f)<br> for {<br> offset--<br> _, err := f.Seek(offset, os.SEEK_END)<br> if err != nil {<br> log.Println(err)<br> break<br> }<br> r.Reset(f)<br> b, err := r.Peek(1)<br> if err != nil {<br> log.Println(err)<br> break<br> }<br> if string(b) == delim {<br> break<br> }<br> }<br> info, err := f.Stat()<br> if err != nil {<br> log.Fatal(err)<br> }<br> err = f.Truncate(info.Size() + offset)<br> if err != nil {<br> log.Fatal(err)<br> }<br>}<br><br>
更多关于Golang Go语言中如何删除一个文件的最后一行?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
多谢,简化了一下 haha<br>func delLastLine(err error, file *os.File) error {<br> stat, err := file.Stat()<br> err = file.Truncate(stat.Size() - 1)<br> if err != nil {<br> panic(err)<br> }<br> return err<br>}<br>
这个貌似不对,stat.Size()是字节数
我只要删除文件最后一个字符就好了。<br>func delLastLine(c TemplateConfig) {<br> file, err := gfile.OpenFile(c.RootPath+c.PathCmd, os.O_WRONLY, 0600)<br> if err != nil {<br> panic(err)<br> }<br><br> stat, err := file.Stat()<br> if err = file.Truncate(stat.Size() - 2); err != nil {<br> panic(err)<br> }<br> if err = file.Close(); err != nil {<br> panic(err)<br> }<br>}<br>
最后一行
删除最后一个字符这么做可以,但是如果要删除最后一行,貌似没有特别高效的办法
在Golang中删除文件的最后一行,可以通过以下步骤实现:
- 读取文件内容:首先,将整个文件内容读取到内存中。
- 去除最后一行:然后,通过字符串操作去除文件的最后一行(通常包括行尾换行符)。
- 写回文件:最后,将修改后的内容写回文件。
这里是一个简单的示例代码,演示了如何实现这一操作:
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"strings"
)
func removeLastLine(filePath string) error {
// 读取文件内容
data, err := ioutil.ReadFile(filePath)
if err != nil {
return err
}
// 转换为字符串并去除最后一行
lines := strings.Split(string(data), "\n")
if len(lines) > 0 {
lines = lines[:len(lines)-1]
}
newData := strings.Join(lines, "\n") + "\n" // 确保文件末尾有换行符
// 写回文件
return ioutil.WriteFile(filePath, []byte(newData), 0644)
}
func main() {
err := removeLastLine("example.txt")
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Last line removed successfully.")
}
}
注意:这段代码会覆盖原文件,请在操作前确保有备份。另外,对于大文件,可能需要更高效的逐行读取和写入方法,以避免内存占用过高。