我目前在使用 os.OpenFile 时遇到问题。当我运行 go 测试时,它只是给了我“权限被拒绝”。type log struct { Message string Source string Timestamp time.Time ErrorCode ErrorCode}type ErrorCode intconst ( 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 logfileopen logs/log.txt: permission deniedCan't find logfileopen logs/log.txt: permission denied我做错了什么?似乎 OpenFile 没有正确设置我的权限(-rw-r--r--)。
1 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
所以我能够解决这个问题。
os.Chdir("..")
被一遍又一遍地召唤。显然,当前工作目录已存储,并且在 func 完成后不会变回原来的状态。
删除后,一切正常。我刚添加的../
到os.Mkdir
和os.OpenFile
。
我正在寻找使用环境变量来使这项工作更好我认为。
- 1 回答
- 0 关注
- 254 浏览
添加回答
举报
0/150
提交
取消