user3051040
user3051040

Reputation: 161

How to resolve user environment variables in filepath

Golang on windows. Trying to use

os.Open("%userprofile%\\myfile.txt")

Getting file path not found and golang is not resolving %userprofile% to my C:\users\myusername folder.

Upvotes: 3

Views: 2064

Answers (4)

stu0292
stu0292

Reputation: 481

Just written a package to do this. Feedback welcome

https://gitlab.com/stu-b-doo/windowspathenv/

fmt.Println(windowspathenv.Resolve("%USERPROFILE%/Documents"))

// C:\Users\YourName\Documents

Upvotes: 1

retgits
retgits

Reputation: 1406

To get a file handle, and make your program a little portable too, try

userprofile := os.Getenv("USERPROFILE")
f, err := os.Open(path.Join(userprofile, "myfile.txt"))

The os.Getenv() will read the environment variable and path.Join() will take care of properly constructing the path (so no need to do \\).

Instead of os.Getenv() you might also want to look at os.LookupEnv(). This will tell you if the environment variable you're looking for is empty or simply not existing. A good example of how you can use that to set default values can be found in this answer on SO.

Upvotes: 6

Gary Leeson
Gary Leeson

Reputation: 9

Have a look at http://www.golangprograms.com/how-to-set-get-and-list-environment-variables.html

You can read the 'userprofile' environment value and and build the path before passing it to os.Open

Upvotes: -1

user3051040
user3051040

Reputation: 161

userprofile := os.Getenv("USERPROFILE")
os.Open(userprofile+"\\myfile.txt")

Upvotes: 0

Related Questions