在测试中出现了os.OpenFile权限问题。

huangapple go评论83阅读模式
英文:

os.OpenFile permission problems in test

问题

我目前遇到了一个关于os.OpenFile的问题。当我运行我的go测试时,它只是给我返回"permission denied"。

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

提前感谢。

英文:

I'm currently having a problem with os.OpenFile. It just gives me "permission denied" when i run my go test.

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())
}

Output:

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

What am I doint wrong? It seems like OpenFile doesn't set my permissions correctly (-rw-r--r--).

Thanks in advance

答案1

得分: 1

所以我成功解决了这个问题。

os.Chdir("..")

被反复调用。显然,当前工作目录被存储下来,在函数执行完后没有改变回原来的状态。

在移除这行代码后,一切都正常工作了。我只是在os.Mkdiros.OpenFile中添加了../

我打算使用环境变量来改进这个功能。

英文:

So I was able to solve this problem.

os.Chdir("..")

was called over and over again. And obviously the current working directory is stored and doesn't change back to what it was after the func was done.

After removing it, everything worked perfectly normal. I just added the ../ to the os.Mkdir and to os.OpenFile.

I'm looking to work with environment variables to makes this work better I think.

huangapple
  • 本文由 发表于 2015年10月4日 07:28:23
  • 转载请务必保留本文链接:https://go.coder-hub.com/32928516.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定