Golang Go语言中如何删除一个文件的最后一行?

发布于 1周前 作者 yibo5220 来自 Go语言

Golang Go语言中如何删除一个文件的最后一行?
null

7 回复

<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中删除文件的最后一行,可以通过以下步骤实现:

  1. 读取文件内容:首先,将整个文件内容读取到内存中。
  2. 去除最后一行:然后,通过字符串操作去除文件的最后一行(通常包括行尾换行符)。
  3. 写回文件:最后,将修改后的内容写回文件。

这里是一个简单的示例代码,演示了如何实现这一操作:

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.")
    }
}

注意:这段代码会覆盖原文件,请在操作前确保有备份。另外,对于大文件,可能需要更高效的逐行读取和写入方法,以避免内存占用过高。

回到顶部