附加到Go中的文件

sev*_*bar 74 file-io go

所以我可以从这样的本地文件中读取:

data, error := ioutil.ReadFile(name)
Run Code Online (Sandbox Code Playgroud)

我可以写一个本地文件

ioutil.WriteFile(filename, content, permission)
Run Code Online (Sandbox Code Playgroud)

但是我如何附加到文件?有内置方法吗?

Rei*_*ica 123

这个答案适用于Go1:

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

defer f.Close()

if _, err = f.WriteString(text); err != nil {
    panic(err)
}
Run Code Online (Sandbox Code Playgroud)

  • 如果文件可能不存在,os.O_CREATE很好. (48认同)
  • 为什么不是0666文件模式?我认为这是一个更好的默认值. (3认同)
  • 也许是一个有点愚蠢的问题,但为什么它需要“os.O_APPEND”和“os.O_WRONLY”?这肯定有效,但为什么两者都有呢? (2认同)

Jim*_*bor 39

Go docs有一个完美的例子:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)


sev*_*bar 25

弄清楚了

更多信息

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

n, err := f.WriteString(text) 

f.Close()
Run Code Online (Sandbox Code Playgroud)

  • 你也应该使用os.O_WRONLY (8认同)

par*_*ing 6

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)
}
Run Code Online (Sandbox Code Playgroud)

通过向该函数添加标志,对 golang 站点中提供的函数进行了轻微更改,os.OpenFile该函数默认只允许读取文件,而不允许在其他功能中进行编辑。


Jav*_*ánc 5

...我将使用fmt.Fprintf,因为接受作家...并且连接或文件将是作家并且易于以字符串的方式编写...

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)
Run Code Online (Sandbox Code Playgroud)

希望对您有所帮助!

哈维尔


Luk*_*e W 5

如果您还想创建文件

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