/// <inheritdoc/> private IEnumerable <string> BuildPartsArray() { if (Anchor != String.Empty) { yield return(Anchor); } foreach (var part in Dirname.Split( new [] { PathSeparator }, StringSplitOptions.RemoveEmptyEntries)) { yield return(part); } if (Filename != String.Empty) { yield return(Filename); } }
/// <inheritdoc/> public TPath RelativeTo(IPurePath parent) { if (!ComponentComparer.Equals(parent.Drive, Drive) || !ComponentComparer.Equals(parent.Root, Root)) { throw new ArgumentException(String.Format( "'{0}' does not share the same root/drive as '{1}', " + "thus cannot be relative.", this, parent)); } var thisDirname = Dirname .Split(PathSeparator[0]).GetEnumerator(); var parentRelative = parent.Relative().ToString(); if (parentRelative == String.Empty) { return(Relative()); } var parentDirname = parentRelative.Split(PathSeparator[0]).GetEnumerator(); while (parentDirname.MoveNext()) { if (!thisDirname.MoveNext() || !ComponentComparer.Equals(parentDirname.Current, thisDirname.Current)) { throw new ArgumentException(String.Format( "'{0}' does not start with '{1}'", this, parent)); } } var builder = new StringBuilder(); while (thisDirname.MoveNext()) { if (builder.Length != 0) { builder.Append(PathSeparator); } builder.Append(thisDirname.Current); } return(PurePathFactoryFromComponents( null, null, null, builder.ToString(), Basename, Extension)); }