2011-08-22 11 views
38

Así que se puede leer desde un archivo local, así:Anexar a un archivo en Ir

data, error := ioutil.ReadFile(name) 

Y puede escribir en un archivo local

ioutil.WriteFile(filename, content, permission) 

Pero ¿cómo puedo agregar a un archivo ? ¿Hay un método incorporado?

+3

Sí, lo has conseguido. Las funciones de ioutil son solo conveniencias que se encargan de tareas comunes. Si desea más control, consulte el paquete de os. –

Respuesta

76

Esto responde a las obras en 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) 
} 
+2

¿Por qué no el modo de archivo 0666? Pensé que era un mejor valor predeterminado. –

+1

@SridharRatnakumar: ver [otro comentario] (http://stackoverflow.com/questions/2245193/c-linux-file-permission-problem-with-open#comment-2203227) y _ [man umask] (http://man7.org/linux/man-pages/man2/umask.2.html)_. Con la umask típica de 022, obtendrá los permisos típicos: '0666 & ~ 022 = 0644 = rw-r - r -' – akavel

+17

os.O_CREATE es agradable de incluir si el archivo podría no existir. – bugloaf

15

lo descubrió

More info

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

n, err := f.WriteString(text) 

f.Close() 
+7

también debería usar os.O_WRONLY – zhaozhi

+0

http://stackoverflow.com/questions/33851692/golang-bad-file-descriptor#answer-33852107 "de forma predeterminada obtiene un descriptor de archivo de solo lectura". –

3

... Me gustaría utilizar fmt.Fprintf, porque aceptar un escritor ... y una conexión o archivos será un escritor y fácil de escribir en una forma de cadena ...

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) 

Espero que esta ayuda!

Javier,

-1

Si también desea crear el archivo

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

12

docs Go tiene una 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) 
    } 
} 
Cuestiones relacionadas