3
出力をいくつかのファイルに書き出す小さなサービスアプリケーションを作成しました。サービスは、WindowsとLinuxの両方で実行する必要があります。 Windowsではすべてが大変ですが、Linuxではファイルが作成されますが、すべて空です。ファイルにはWindowsではデータが入力されますが、Linuxではデータが入力されません
以下の小さなプログラムは、まったく同じ挙動を示している:実行すると
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
f, err := os.OpenFile("test.txt", os.O_APPEND|os.O_CREATE, 0777)
if err != nil {
fmt.Println(err.Error())
return
}
defer f.Close()
w := bufio.NewWriter(f)
_, err = w.Write([]byte("hello"))
if err != nil {
fmt.Println(err.Error())
}
w.Flush()
}
、上記のコードは出力にLinux上ですべてのエラーを思えません。 test.txtのファイルサイズからわかるように、Windowsではファイルにコンテンツを書き出しますが、Linuxではそうはしません。 Windows上の
ディレクトリ:Linux上
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 14.04.2016 10:37 345 main.go
-a---- 14.04.2016 10:45 10 test.txt
-a---- 14.04.2016 10:37 2635264 writetest.exe
ディレクトリ:
drwxrwxr-x 2 localuser localuser 4096 Apr 14 10:55 ./
drwxr-xr-x 8 localuser localuser 4096 Apr 14 10:27 ../
-rw-rw-r-- 1 localuser localuser 345 Apr 14 10:37 main.go
-rwxrwxr-x 1 localuser localuser 0 Apr 14 10:55 test.txt*
私はここで何をしないのですか?
これは完全にトリックを行うように見えますが、私はまだそれを完全に得ていません。なぜこれがそうですか?そしてさらに:なぜw.Writeによってエラーが投げられないのですか? –
あなたはbufioに書き込んでいるので、問題なくバッファにデータを格納するだけです。しかし、w.Flush()の呼び出しはおそらくエラーを返します。 –
Facepalm! wFlush()は実際にエラーを返します... –