1

Situation:

I'm trying to write a file into a directory, like shown as follows:

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

Problem:

The following error occurs in line 5:

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

  • I already tried to create the file before writing with os.Create, but it doesn't work either.
  • Loading from the data directory works just fine. Only writing new files into the directory fails.

Additional information:

My project structure is as follows:

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

As mentioned above, reading data/Welcome.json works just fine (by using io/ioutils.ReadFile). The source is available on https://gitlab.com/thyaris/Wiki.

Executing D:\GitWorkspaces\Wiki\wiki>go test -v page writes the following output:

=== 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
11
  • Do you have write permissions for that directory? Commented Jul 25, 2017 at 22:40
  • I am working on windows, so I thought this should not be a problem. I assumed this also because it worked when I was not yet writing into the data directory. Commented Jul 25, 2017 at 22:42
  • I just checked the permissions, I have permission to read and write files in the data directory Commented Jul 25, 2017 at 22:42
  • What about using "./data/" instead of "data/"? Assuming that the "data" directory is in the current working directory of course. Commented Jul 25, 2017 at 22:43
  • Produces the same error, but with ./data/Testpage.json Commented Jul 25, 2017 at 22:43

1 Answer 1

2

Your problem here is that the test engine is not running your executable with the working directory you expect. Instead of using the working directory defined by your shell or IDE, it is setting it to the source directory of the code being tested. (I had this bite me too once, long ago :) I had almost forgotten about that...)

The simple solution is to change DerivePath so that you can set the prefix externally, then change it to a the path you need at the beginning of your tests. There are other (possibly better?) solutions of course.

Sign up to request clarification or add additional context in comments.

2 Comments

I fixed by creating the data directory in the tests and deleting it afterwards. I will change this sometime.
Same here on windows 10 but using Linux subsystem with ubuntu installed. I have to have my code delete the directory and then recreate the directory before I can create the file again. Otherwise it says it creates the file without error but no file exists. also it never returns a file does not exists .

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.