Golang无法将文件写入目录

时间:2017-07-25 22:36:54

标签: go io

情况:

我正在尝试将文件写入目录,如下所示:

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:系统找不到指定的路径。

  • 我在尝试使用os.Create之前尝试创建该文件,但它也不起作用。
  • data目录加载工作正常。只有将 new 文件写入目录才会失败。

其他信息:

我的项目结构如下:

│   .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

如上所述,阅读 data/Welcome.json工作正常(使用io/ioutils.ReadFile)。 该来源位于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

1 个答案:

答案 0 :(得分:2)

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

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