87 Entonces puedo leer de un archivo local así: data, error := ioutil.ReadFile(name) Y puedo escribir en un archivo local ioutil.WriteFile(filename, content, permission) Pero, ¿cómo puedo agregar a un archivo? ¿Existe un método incorporado? file-io go seveibar fuente 4 Sí, lo tienes. Las funciones ioutil son solo comodidades que se encargan de tareas comunes. Si desea más control, consulte el paquete del sistema operativo. Evan Shaw Respuestas: 147 Esta respuesta funciona en 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) } Sridhar Ratnakumar fuente 3 ¿Por qué no el modo de archivo 0666? Pensé que era un mejor valor predeterminado. Dmitri Shuralyov 1 @SridharRatnakumar: vea otro comentario y man umask . Con umask típico de 022, obtendrá permisos típicos:0666 & ~022 = 0644 = rw-r--r-- akavel 55 Es bueno incluir os.O_CREATE si es posible que el archivo aún no exista. bugloaf 2 tal vez una pregunta un poco estúpida, pero ¿por qué necesitaría ambos os.O_APPENDy os.O_WRONLY? Esto funciona con seguridad, pero ¿por qué ambos? Dusan Gligoric 51 Go docs tiene un ejemplo perfecto : 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) } } Jimmy Obonyo Abor fuente 28 Lo averigué Más información f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) n, err := f.WriteString(text) f.Close() seveibar fuente 8 también debe usar os.O_WRONLY zhaozhi stackoverflow.com/questions/33851692/… "de forma predeterminada, obtiene un descriptor de archivo de solo lectura". Han Qiu 5 ... Yo usaría fmt.Fprintf, porque acepte un escritor ... y una conexión o archivos será un escritor y fácil de escribir en 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 esto ayude! Javier, Javier Gutiérrez-Maturana Sánc fuente 3 Si también desea crear el archivo f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) Luke W fuente 0 Digamos que desea agregar el contenido del archivo currental archivo all, luego el siguiente código está funcionando: 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) } } } Hasan A Yousef fuente
147 Esta respuesta funciona en 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) } Sridhar Ratnakumar fuente 3 ¿Por qué no el modo de archivo 0666? Pensé que era un mejor valor predeterminado. Dmitri Shuralyov 1 @SridharRatnakumar: vea otro comentario y man umask . Con umask típico de 022, obtendrá permisos típicos:0666 & ~022 = 0644 = rw-r--r-- akavel 55 Es bueno incluir os.O_CREATE si es posible que el archivo aún no exista. bugloaf 2 tal vez una pregunta un poco estúpida, pero ¿por qué necesitaría ambos os.O_APPENDy os.O_WRONLY? Esto funciona con seguridad, pero ¿por qué ambos? Dusan Gligoric 51 Go docs tiene un ejemplo perfecto : 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) } } Jimmy Obonyo Abor fuente 28 Lo averigué Más información f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) n, err := f.WriteString(text) f.Close() seveibar fuente 8 también debe usar os.O_WRONLY zhaozhi stackoverflow.com/questions/33851692/… "de forma predeterminada, obtiene un descriptor de archivo de solo lectura". Han Qiu 5 ... Yo usaría fmt.Fprintf, porque acepte un escritor ... y una conexión o archivos será un escritor y fácil de escribir en 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 esto ayude! Javier, Javier Gutiérrez-Maturana Sánc fuente 3 Si también desea crear el archivo f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) Luke W fuente 0 Digamos que desea agregar el contenido del archivo currental archivo all, luego el siguiente código está funcionando: 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) } } } Hasan A Yousef fuente
51 Go docs tiene un ejemplo perfecto : 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) } } Jimmy Obonyo Abor fuente
28 Lo averigué Más información f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) n, err := f.WriteString(text) f.Close() seveibar fuente 8 también debe usar os.O_WRONLY zhaozhi stackoverflow.com/questions/33851692/… "de forma predeterminada, obtiene un descriptor de archivo de solo lectura". Han Qiu 5 ... Yo usaría fmt.Fprintf, porque acepte un escritor ... y una conexión o archivos será un escritor y fácil de escribir en 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 esto ayude! Javier, Javier Gutiérrez-Maturana Sánc fuente 3 Si también desea crear el archivo f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) Luke W fuente 0 Digamos que desea agregar el contenido del archivo currental archivo all, luego el siguiente código está funcionando: 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) } } } Hasan A Yousef fuente
5 ... Yo usaría fmt.Fprintf, porque acepte un escritor ... y una conexión o archivos será un escritor y fácil de escribir en 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 esto ayude! Javier, Javier Gutiérrez-Maturana Sánc fuente
3 Si también desea crear el archivo f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) Luke W fuente
0 Digamos que desea agregar el contenido del archivo currental archivo all, luego el siguiente código está funcionando: 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) } } } Hasan A Yousef fuente
Respuestas:
Esta respuesta funciona en 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) }
fuente
0666 & ~022 = 0644 = rw-r--r--
os.O_APPEND
yos.O_WRONLY
? Esto funciona con seguridad, pero ¿por qué ambos?Go docs tiene un ejemplo perfecto :
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) } }
fuente
Lo averigué
Más información
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644) n, err := f.WriteString(text) f.Close()
fuente
... Yo usaría fmt.Fprintf, porque acepte un escritor ... y una conexión o archivos será un escritor y fácil de escribir en 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 esto ayude!
Javier,
fuente
Si también desea crear el archivo
f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
fuente
Digamos que desea agregar el contenido del archivo
current
al archivoall
, luego el siguiente código está funcionando: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) } } }
fuente