将缓冲区写入文件不会返回错误,那么为什么文件为空后记?

0 buffer go

我正在尝试读取所有标准输入并将其写入文件。它没有向提供的文件写入任何内容。为什么它不起作用?

package main

import (
    "os"
    "bytes"
    "fmt"
    "bufio"
)

func main() {
    fn := os.Args[1]
    var input bytes.Buffer
    scanner := bufio.NewScanner(os.Stdin)

    for scanner.Scan() {
        fmt.Fprintf(&input, scanner.Text())
        fmt.Fprintf(&input, "\n")
    }   

    fi, _ := os.Open(fn)
    defer fi.Close()

    fi.Write(input.Bytes())
}
Run Code Online (Sandbox Code Playgroud)

进而...

touch writetothis.txt
echo "input text" | go run main.go writetothis.txt
# writetothis.txt is empty
Run Code Online (Sandbox Code Playgroud)

hba*_*gdi 5

Open以只读模式打开文件。
参考文档:https : //golang.org/pkg/os/#Open

相反,使用OpenFile.

此外,无论何时编码,都要始终检查错误。它会在您的一生中至少为您节省数周的工作时间。

这是一个工作代码:

package main

import (
    "bufio"
    "bytes"
    "fmt"
    "os"
)

func main() {
    fn := os.Args[1]
    var input bytes.Buffer
    scanner := bufio.NewScanner(os.Stdin)

    for scanner.Scan() {
        fmt.Fprintf(&input, scanner.Text())
        fmt.Fprintf(&input, "\n")
    }

    fmt.Println(input.Bytes())
    fi, err := os.OpenFile(fn, os.O_RDWR|os.O_CREATE, 0755)

    if err != nil {
        fmt.Println("Error with Open()",err)
    }
    defer fi.Close()

    n, err := fi.Write(input.Bytes())
    if err != nil {
        fmt.Println("Error with Write()", err)
    }
    fmt.Println("Bytes written to file: ",n)
}
Run Code Online (Sandbox Code Playgroud)