英文:
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.Mkdir
和os.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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论