public static Path GetPathWithoutLastBit(string path)
{
Contract.Requires(!string.IsNullOrEmpty(path));
Contract.Requires(path.Length >= 2);
for (int i = path.Length - 1; i >= 0; i--)
if (GetDirectorySeparatorChars().Contains(path[i]))
if (path.Length - 1 == i) // last char
continue;
else // otherwise, return everything before the last \ or |, unless it's the root
if (PathInfo.Parse(path.Substring(0, i + 1)).Root == path.Substring(0, i + 1)) return new Path(path.Substring(0, i + 1));
else return new Path(path.Substring(0, i));
//var p = new Path(path);
//var segments = p.Segments.ToList();
//return segments.TakeWhile((s,i) => i != segments.Count-1)
// .Aggregate(segments.First(), System.IO.Path.Combine)
// .ToPath();
return new Path(path);
}