在Go中向文件追加内容

huangapple go评论72阅读模式
英文:

Append to a file in Go

问题

但是我如何向文件追加内容呢?有没有内置的方法可以实现?

英文:

So I can read from a local file like so:

data, error := ioutil.ReadFile(name)

And I can write to a local file

ioutil.WriteFile(filename, content, permission)

But how can I append to a file? Is there a built in method?

答案1

得分: 202

这个答案在Go1中有效:

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
if err != nil {
	panic(err)
}

defer f.Close()

if _, err = f.WriteString(text); err != nil {
	panic(err)
}
英文:

This answers works in Go1:

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
if err != nil {
	panic(err)
}

defer f.Close()

if _, err = f.WriteString(text); err != nil {
	panic(err)
}

答案2

得分: 73

Go文档中有一个完美的例子

package main

import (
	"log"
	"os"
)

func main() {
	// 如果文件不存在,则创建文件,否则追加到文件中
	f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		log.Fatal(err)
	}
	if _, err := f.Write([]byte("追加一些数据\n")); err != nil {
		log.Fatal(err)
	}
	if err := f.Close(); err != nil {
		log.Fatal(err)
	}
}
英文:

Go docs has a perfect example :

package main

import (
	"log"
	"os"
)

func main() {
	// If the file doesn't exist, create it, or append to the file
	f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		log.Fatal(err)
	}
	if _, err := f.Write([]byte("appended some data\n")); err != nil {
		log.Fatal(err)
	}
	if err := f.Close(); err != nil {
		log.Fatal(err)
	}
}

答案3

得分: 32

找到答案

更多信息

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) 

n, err := f.WriteString(text) 

f.Close()
英文:

Figured it out

More info

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) 

n, err := f.WriteString(text) 

f.Close()

答案4

得分: 8

...我会使用fmt.Fprintf,因为它接受一个writer...而连接或文件都可以作为writer,很容易以字符串的方式进行写入...

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600)
if err != nil {
    panic(err)
}

defer f.Close()
fmt.Fprintf(f, "%s", text)

希望这对你有帮助!

Javier,

英文:

... I would use fmt.Fprintf, because accept a writer... and a connection or files will be a writer and easy to write in a way of string...

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600)
if err != nil {
    panic(err)
}

defer f.Close()
fmt.Fprintf(f, "%s", text)

I hope this help!

Javier,

答案5

得分: 6

如果你也想创建文件

f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)

英文:

If you also want to create the file

f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)

答案6

得分: 5

f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
panic(err)
}

defer f.Close()

if _, err = f.WriteString(text); err != nil {
panic(err)
}

英文:
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
    panic(err)
}

defer f.Close()

if _, err = f.WriteString(text); err != nil {
    panic(err)
}

Made a slight change from the one provided in the golang site by adding flags to the os.OpenFile function which by default will only allow reading of a file and not editing amongst other features.

答案7

得分: 1

让我们假设你想将文件current的内容添加到文件all中,那么下面的代码可以实现:

func updateTrx() {
	var err error
	var f *os.File

	// 如果文件不存在,则创建文件,否则追加到文件中
	if f, err = os.OpenFile("all.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644); err != nil {
		log.Fatal(err)
	}
	defer func() {
		if err := f.Close(); err != nil {
			log.Fatal("error", err)
		}
	}()

	var current *os.File
	if current, err = os.OpenFile("current.csv", os.O_RDONLY, 0); err != nil {
		log.Fatal("error", err)
	}

	defer func() {
		if err := current.Close(); err != nil {
			log.Fatal("error", err)
		}
	}()

	if fileBytes, err := ioutil.ReadAll(current); err != nil {
		log.Fatal("error", err)
	} else {
		if _, err := f.Write([]byte(fileBytes)); err != nil {
			log.Fatal(err)
		}
	}
}
英文:

Let's say you want to add the contents of filecurrent to the file all, then below code is working:

func updateTrx() {
	var err error
	var f *os.File

	// If the file doesn't exist, create it, or append to the file
	if f, err = os.OpenFile("all.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644); err != nil {
		log.Fatal(err)
	}
	defer func() {
		if err := f.Close(); err != nil {
			log.Fatal("error", err)
		}
	}()

	var current *os.File
	if current, err = os.OpenFile("current.csv", os.O_RDONLY, 0); err != nil {
		log.Fatal("error", err)
	}

	defer func() {
		if err := current.Close(); err != nil {
			log.Fatal("error", err)
		}
	}()

	if fileBytes, err := ioutil.ReadAll(current); err != nil {
		log.Fatal("error", err)
	} else {
		if _, err := f.Write([]byte(fileBytes)); err != nil {
			log.Fatal(err)
		}
	}
}

huangapple
  • 本文由 发表于 2011年8月23日 01:37:07
  • 转载请务必保留本文链接:https://go.coder-hub.com/7151261.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定