一个文件在 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 上的目录:


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

Linux 上的目录:


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*

我在这里错过了什么?


明月笑刀无情
浏览 214回答 1
1回答

跃然一笑

更改您的标志,从os.O_APPEND|os.O_CREATEtoos.O_RDWR|os.O_APPEND|os.O_CREATE将适用于 Linux 和 Mac OSX。关键思想是您想要追加文件的事件,您仍然需要在 Linux 和 Mac OSX 中使用 Write 标志打开。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go