Reputation: 12803
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
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
Reputation: 3485
You can do
new DirectoryInfo( @"..\MyOtherFolder\foo.bar" ).FullName
Upvotes: 3
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
Reputation: 6107
Have you tried
Path.GetFullPath(Path.Combine(@"C:\test", @"..\MyOtherFolder\foo.bar"))
That should do the trick.
Upvotes: 8
Reputation: 62248
Try to use Path.Combine(...) method, it has to help you to achieve what you want..
Upvotes: 2