我制作了一个小型服务应用程序,将其输出写入多个文件。该服务必须在 Windows 和 Linux 上运行。Windows 上的一切都是笨拙的,但在 Linux 上,文件被创建,但都是空的。以下小程序显示了完全相同的行为:package mainimport ( "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*我在这里错过了什么?
1 回答

跃然一笑
TA贡献1826条经验 获得超6个赞
更改您的标志,从os.O_APPEND|os.O_CREATE
toos.O_RDWR|os.O_APPEND|os.O_CREATE
将适用于 Linux 和 Mac OSX。
关键思想是您想要追加文件的事件,您仍然需要在 Linux 和 Mac OSX 中使用 Write 标志打开。
- 1 回答
- 0 关注
- 188 浏览
添加回答
举报
0/150
提交
取消