Path.combine to combine two paths and backslash in second parameter

Hi,

system.IO.Path comes with many good function to work with the File system. some of them are ChangeExtension, GetDirectoryName, GetExtension, GetFileNameWithoutExtension, IsPathRooted etc.

The system.IO.Path.Combine is also include as a function in system.IO.Path to combine two paths provided to it. A few days back I was working with it to add paths provided by user. But I started getting erros where by sometimes the path would not be combined and only the second provided path was returned. After doing some research on this I got to the root of the cause.

The problem was only occuring when the second path provided in the method was starting with "\".

To make my understanding more accurate I made a small console applictaion to show what would be the result in differenct scenarios. Below are the situation and the output I got for them.

Console.WriteLine(System.IO.Path.Combine(@"D:\V\", @"S\test1.doc"));
Console Output - D:\V\S\test1.doc

Console.WriteLine(System.IO.Path.Combine(@"D:\V\", @"\S\test1.doc"));
Console Output - \S\test1.doc

Console.WriteLine(System.IO.Path.Combine(@"D:\V", @"S\test1.doc"));
Console Output - D:\V\S\test1.doc

Console.WriteLine(System.IO.Path.Combine(@"D:\V", @"\S\test1.doc"));
Console Output - \S\test1.doc

As we can see from the above results whenever the second path starts with "\" the result only includes the first path.

Hence we should be cautions when we are using the Path.Combine function to combine two function.

Vikram

3 Comments

  • RTFM :)

    "If path2 contains an absolute path, this method returns path2"

  • Isn't \S\test1.doc a kind of absolute path (meaning X:\S\test1.doc where X: is the current drive)? Path.Combine is not a simple concatenation, e.g. you would get the same kind of results with Console.WriteLine(System.IO.Path.Combine(@"D:\V\", @"F:\S\test1.doc"));

  • Excellent post. It appears that path.combine is too dangerous to rely on. Looks like we should use our own function.

Comments have been disabled for this content.