2017-07-25 184 views
1

(我是新来的GO)Golang不能写入文件到目录

您好, 我试图写一个文件到使用转到一个目录。

func (p *Page) Save() error { 
    filepath := DerivePath(p.Title) 
    fmt.Println(filepath) 
    content, _ := json.MarshalIndent(p, "", " ") 
    err := ioutil.WriteFile(filepath, content, 0600) 
    return err 
} 

这是代码。第5行中出现的错误,说

open data/Testpage.json: The system cannot find the path specified. 

我已经尝试过用os.Create写入之前创建文件,但它也不管用。

从目录加载data工作得很好,只能将新文件写入目录失败。

我不明白为什么这不起作用。 我知道这并不是很多信息,但我不知道你还需要什么。

感谢您的提前解答!

编辑: 我的项目结构:

│ .gitignore 
│ .project 
│ 
├───bin 
│  main.exe 
│ 
├───data 
│  Welcome.json 
│ 
├───pkg 
│ └───windows_amd64 
│   page.a 
│ 
├───src 
│ ├───main 
│ │  main.go 
│ │ 
│ └───page 
│   page.go 
│   page_test.go 
│ 
└───templates 
     view.html 

(使用io/ioutils.ReadFile)读data/Welcome.json作品就好

来源是可在https://gitlab.com/thyaris/Wiki

控制台输出

D:\GitWorkspaces\Wiki\wiki>go test -v page 
=== RUN TestSave 
data/Testpage.json 
--- FAIL: TestSave (0.00s) 
     page_test.go:15: open data/Testpage.json: The system cannot find the path specified. 
     page_test.go:19: 'Testpage.json' was not created 
=== RUN TestLoadPage 
--- FAIL: TestLoadPage (0.00s) 
     page_test.go:26: Error while loading 
     page_test.go:32: File content did not match 
=== RUN TestDelete 
--- PASS: TestDelete (0.00s) 
FAIL 
exit status 1 
FAIL page 0.094s 
+0

您是否拥有该目录的写入权限? –

+0

我在windows上工作,所以我认为这不应该是一个问题。我还假设这也是因为当我还没有写入'data'目录时它工作。 – Thyaris

+0

我刚刚检查了权限,我有权限读取和写入'data'目录中的文件 – Thyaris

回答

1

您的问题在于,测试引擎未运行您期望的工作目录的可执行文件。它不是使用由shell或IDE定义的工作目录,而是将其设置为正在测试的代码的源目录。 (很久以前我也曾经咬过我一次:)我几乎已经忘记了这一点...)

简单的解决方案是更改DerivePath,以便您可以在外部设置前缀,然后将其更改为路径你需要在你的测试开始。当然还有其他的(可能更好?)解决方案。

+0

我通过在测试中创建数据目录并在之后删除它来修复它。我会在某个时候改变它。 – Thyaris