os.OpenFile测试中的权限问题

时间:2015-10-03 23:28:23

标签: go

我目前遇到os.OpenFile问题。它只是让我"许可被拒绝"当我进行测试时。

type log struct {
    Message   string
    Source    string
    Timestamp time.Time
    ErrorCode ErrorCode
}

type ErrorCode int

const (
    Info ErrorCode = 1 + iota
    Warning
    Error
)

func (errorCode ErrorCode) String() string {
    switch errorCode {
    case Info:
            return "Info"
    case Warning:
            return "Warning"
    case Error:
            return "Error"
    }
    return "Type not found"
}

func writeToLog(logItem log) {
    err := os.Chdir("..")
    if err != nil {
            fmt.Println("Can't change working directory")
    }
    err = os.Mkdir("logs", os.FileMode(0777))
    if err != nil && os.IsNotExist(err) {
            fmt.Println("Can't create log directory")
    }
    f, err := os.OpenFile("logs/log.txt",
            os.O_WRONLY|os.O_CREATE|os.O_APPEND, os.FileMode(0666))
    if err != nil {
            fmt.Println("Can't find logfile")
            fmt.Println(err)
    }
    defer f.Sync()
    defer f.Close()

    f.WriteString(logItem.ErrorCode.String() + logItem.Source +
            logItem.Message + logItem.Timestamp.String())
}

输出:

Can't find logfile
open logs/log.txt: permission denied
Can't find logfile
open logs/log.txt: permission denied

我做错了什么?看起来OpenFile没有正确设置我的权限(-rw-r - r - )。

提前致谢

1 个答案:

答案 0 :(得分:1)

所以我能够解决这个问题。

os.Chdir("..")

一遍又一遍地被召唤。显然,当前的工作目录已存储,并且不会改变回func完成后的状态。

删除后,一切正常。我刚刚将../添加到os.Mkdiros.OpenFile

我正在寻找使用环境变量以使我的工作变得更好。