Привет приятели у меня есть проблема в go, эта проблема состоит в чтении и издавании текстового файла (Результат решающий). Эта проблема я должен оплачивать это в GO и то, что он пробует, пошло:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
f, err := os.OpenFile("example.txt", os.O_RDWR, 0644)
if err != nil {
fmt.Println("Error al leer el fichero ", err)
return
}
// Leer el fichero
var texto string
scanner := bufio.NewScanner(f)
for scanner.Scan() {
texto += scanner.Text() + "\n"
}
// Agrego contenido
texto = "\n-INICIO-\n" + texto + "\n-FIN-\n"
// Guardar contenido
_, err = fmt.Fprintln(f, texto)
if err != nil {
fmt.Println(err)
}
f.Close()
}
Это дало мне неудачу:
Ошибка моей попытки состояла в том, что контент моего файла concardenó моим редактированием и моей целью состоял в том, чтобы заменять весь текст.
ОНИ ОБОБЩАЮТ: Читать это однажды, получать Ваш контент и remplazarlo.
Проблема состоит, в том, что прочитав файл, нет тебя reposicionado в начало перед тем, как писать:
// Agrego contenido
texto = "\n-INICIO-\n" + texto + "\n-FIN-\n"
// Nos posicionamos al inicio del fichero
_, err = f.Seek(0, 0)
if err != nil {
fmt.Println(err)
}
// Guardar contenido
_, err = fmt.Fprintln(f, texto)
if err != nil {
fmt.Println(err)
}
В любом случае, если ты не должен относиться ningГєn к способу контент, это deberГ, - чтобы быть mГЎs rГЎpido, прежде всего для больших файлов, так как а не apreciarГЎ он отличается:
package main
import (
"io/ioutil"
"fmt"
"os"
)
func main() {
// Creamos un buffer para el contenido. Tener en cuenta que TODO el contenido
// del fichero se cargará en memoria!!
var data []byte
var err error
f, err := os.OpenFile("example.txt", os.O_RDWR, 0644)
if err != nil {
fmt.Println("Error al leer el fichero ", err)
return
}
defer f.Close()
// Leer el fichero
if data, err = ioutil.ReadAll(f); err != nil {
fmt.Printf("Error leyendo fichero: %s\n", err)
os.Exit(1)
}
// Agrego contenido
data = append([]byte("\n-INICIO-\n"), data...)
data = append(data, []byte("\n-FIN-\n")...)
// Nos posicionamos al inicio del fichero
_, err = f.Seek(0, 0)
if err != nil {
fmt.Println(err)
}
// Guardar contenido
_, err = f.Write(data)
if err != nil {
fmt.Println(err)
}
}