猿问

os.OpenFile 权限问题测试

我目前在使用 os.OpenFile 时遇到问题。当我运行 go 测试时,它只是给了我“权限被拒绝”。


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--)。


犯罪嫌疑人X
浏览 255回答 1
1回答

人到中年有点甜

所以我能够解决这个问题。os.Chdir("..")被一遍又一遍地召唤。显然,当前工作目录已存储,并且在 func 完成后不会变回原来的状态。删除后,一切正常。我刚添加的../到os.Mkdir和os.OpenFile。我正在寻找使用环境变量来使这项工作更好我认为。
随时随地看视频慕课网APP

相关分类

Go
我要回答