为了账号安全,请及时绑定邮箱和手机立即绑定

一个文件在 Windows 上填充了数据,但在 Linux 上没有

一个文件在 Windows 上填充了数据,但在 Linux 上没有

Go
明月笑刀无情 2022-01-04 13:39:46
我制作了一个小型服务应用程序,将其输出写入多个文件。该服务必须在 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_CREATEtoos.O_RDWR|os.O_APPEND|os.O_CREATE将适用于 Linux 和 Mac OSX。

关键思想是您想要追加文件的事件,您仍然需要在 Linux 和 Mac OSX 中使用 Write 标志打开。


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号