MgSam
MgSam

Reputation: 12803

Absolute Path from Relative Path with a different current folder

I need to get an absolute path from a relative path, but using a folder other than where the assembly is executing from to resolve "." and "..". Path.GetFullPath does not provide such an overload.

For example, say I have the following path:

..\MyOtherFolder\foo.bar

And the folder the assembly is executing from is:

c:\users\me\desktop\source\myproj\bin\debug\

but it could, in practice, be located anywhere.

I want to specify the "current" folder as c:\test so the ".." resolves to "c:\".

Does anyone know if this is built into the .NET framework anywhere? If not, I plan on making a Utility method, but I thought I'd check first (especially since there's no static extension methods...).

EDIT:

Path.Combine will not work. All this method essentially does is concatenate the two strings.

Upvotes: 3

Views: 10072

Answers (5)

evanmcdonnal
evanmcdonnal

Reputation: 48076

If you're currently in c:\test and you want to get c:\MyOtherFolder\foo.bar without knowing that you're in c:\test you want to do;

 Environment.CurrentDirectory = @"..\MyOtherFolder"; //navigation accepts relative path
 string fullPath = Directory.GetCurrentDirectory(); // returns full path

After that you may want to set the current directory back to your previous location.

Upvotes: 4

You can do

new DirectoryInfo( @"..\MyOtherFolder\foo.bar" ).FullName

Upvotes: 3

plinth
plinth

Reputation: 49179

public string FullPathRelativeTo(string root, string partialPath)
{
    string oldRoot = Directory.GetCurrentDirectory();
    try {
        Directory.SetCurrentDirectory(root);
        return Path.GetFullPath(partialPath);
    }
    finally {
        Directory.SetCurrentDirectory(oldRoot);
    }
}

Upvotes: 5

Marcus
Marcus

Reputation: 6107

Have you tried

Path.GetFullPath(Path.Combine(@"C:\test", @"..\MyOtherFolder\foo.bar"))

That should do the trick.

Upvotes: 8

Tigran
Tigran

Reputation: 62248

Try to use Path.Combine(...) method, it has to help you to achieve what you want..

Upvotes: 2

Related Questions