Читать и издавать файл с вами. OpenFile

Привет приятели у меня есть проблема в 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.

0
задан 21.08.2019, 18:38
1 ответ

Проблема состоит, в том, что прочитав файл, нет тебя 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)
    }
}
1
ответ дан 01.12.2019, 23:02
  • 1
    Спасибо, не комментируйте это ранее, но он я был многому alluda – Andrus Diaz 01.10.2019, 16:49