Istrebitel
Istrebitel

Reputation: 3083

c# open file, path starting with %userprofile%

I have a simple problem. I have a path to a file in user directory that looks like this:

%USERPROFILE%\AppData\Local\MyProg\settings.file

When I try to open it as a file

ostream = new FileStream(fileName, FileMode.Open);

It spits error because it tries to add %userprofile% to the current directory, so it becomes:

C:\Program Files\MyProg\%USERPROFILE%\AppData\Local\MyProg\settings.file

How do I make it recognise that a path starting with %USERPROFILE% is an absolute, not a relative path?

PS: I cannot use

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Because I need to just open the file by its name. User specifies the name. If user specifies "settings.file", I need to open a file relative to program dir, if user specifies a path starting with %USERPROFILE% or some other thing that converts to C:\something, I need to open it as well!

Upvotes: 66

Views: 46236

Answers (5)

john rains
john rains

Reputation: 391

I use this in my Utilities library.

using System;
namespace Utilities
{
    public static class MyProfile
   {
        public static string Path(string target)
        {
            string basePath = 
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + 
@"\Automation\";
            return basePath + target;
        }
    }
}

So I can simply use e.g. "string testBenchPath = MyProfile.Path("TestResults");"

Upvotes: 6

NeverJr
NeverJr

Reputation: 305

You can use the Environment.Username constant as well. Both of the %USERPROFILE% and this Environment variable points the same( which is the currently logged user). But if you choose this way, you have to concatenate the path by yourself.

Upvotes: -2

Andras Zoltan
Andras Zoltan

Reputation: 42333

Try using ExpandEnvironmentVariables on the path.

Upvotes: 7

David M
David M

Reputation: 72860

Use the Environment.ExpandEnvironmentVariables static method:

string fileName= Environment.ExpandEnvironmentVariables(fileName);
ostream = new FileStream(fileName, FileMode.Open);

Upvotes: 6

Oded
Oded

Reputation: 498972

Use Environment.ExpandEnvironmentVariables on the path before using it.

var pathWithEnv = @"%USERPROFILE%\AppData\Local\MyProg\settings.file";
var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);

using(ostream = new FileStream(filePath, FileMode.Open))
{
   //...
}

Upvotes: 119

Related Questions