Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to overwrite file content in golang

Tags:

go

I have a empty file called a.txt, I want to output a value(int) to it in a loop, and overwrite last content in file a.txt. For example,

    // open a file
    f, err := os.Open("test.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()

    // another file
    af, err := os.OpenFile("a.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
    if err != nil {
        log.Fatal(err)
    }
    defer af.Close()

    b := []byte{}

    scanner := bufio.NewScanner(f)
    for scanner.Scan() {
        b = append(b, scanner.Bytes()...)
        // how to output len(b) into a.txt?
    }
like image 249
qxing Avatar asked May 25 '20 10:05

qxing


3 Answers

You can also try:

os.OpenFile with custom flags to truncate file, as shown below

package main

import (
    "log"
    "os"
)

func main() {
    f, err := os.OpenFile("notes.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755)
    if err != nil {
        log.Fatal(err)
    }
    if err := f.Close(); err != nil {
        log.Fatal(err)
    }
}
like image 109
Akhil Thayyil Avatar answered Nov 08 '22 18:11

Akhil Thayyil


Just use the truncate method and write again to file starting at the begining.

err = f.Truncate(0)
_, err = f.Seek(0, 0)
_, err = fmt.Fprintf(f, "%d", len(b))
like image 35
Grzegorz Żur Avatar answered Nov 08 '22 18:11

Grzegorz Żur


Use os.Create() instead:

f, err := os.Create("test.txt")

From the func's doc:

Create creates or truncates the named file. If the file already exists, it is truncated. If the file does not exist, it is created ...

like image 6
Bohemian Avatar answered Nov 08 '22 19:11

Bohemian