我目前遇到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 - )。
提前致谢
答案 0 :(得分:1)
所以我能够解决这个问题。
os.Chdir("..")
一遍又一遍地被召唤。显然,当前的工作目录已存储,并且不会改变回func完成后的状态。
删除后,一切正常。我刚刚将../
添加到os.Mkdir
和os.OpenFile
。
我正在寻找使用环境变量以使我的工作变得更好。