我制作了一个小型服务应用程序,将它的输出写入多个文件。该服务必须同时在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上的目录:
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.exeLinux上的目录:
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*我在这里错过了什么?
发布于 2016-04-14 09:37:11
更改您的标志,从os.O_APPEND|os.O_CREATE到os.O_RDWR|os.O_APPEND|os.O_CREATE将在Linux和Mac上工作。
关键思想是要附加文件的事件,您仍然需要在Linux和Mac中使用写标志打开。
https://stackoverflow.com/questions/36618329
复制相似问题