Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetRelativePath() [2/2]

static string System.IO.Path.GetRelativePath ( string relativeTo,
string path,
StringComparison comparisonType )
inlinestaticprivate

Definition at line 759 of file Path.cs.

760 {
761 if (relativeTo == null)
762 {
763 throw new ArgumentNullException("relativeTo");
764 }
765 if (PathInternal.IsEffectivelyEmpty(relativeTo.AsSpan()))
766 {
767 throw new ArgumentException(SR.Arg_PathEmpty, "relativeTo");
768 }
769 if (path == null)
770 {
771 throw new ArgumentNullException("path");
772 }
773 if (PathInternal.IsEffectivelyEmpty(path.AsSpan()))
774 {
775 throw new ArgumentException(SR.Arg_PathEmpty, "path");
776 }
777 relativeTo = GetFullPath(relativeTo);
778 path = GetFullPath(path);
779 if (!PathInternal.AreRootsEqual(relativeTo, path, comparisonType))
780 {
781 return path;
782 }
783 int num = PathInternal.GetCommonPathLength(relativeTo, path, comparisonType == StringComparison.OrdinalIgnoreCase);
784 if (num == 0)
785 {
786 return path;
787 }
788 int num2 = relativeTo.Length;
789 if (EndsInDirectorySeparator(relativeTo.AsSpan()))
790 {
791 num2--;
792 }
793 bool flag = EndsInDirectorySeparator(path.AsSpan());
794 int num3 = path.Length;
795 if (flag)
796 {
797 num3--;
798 }
799 if (num2 == num3 && num >= num2)
800 {
801 return ".";
802 }
803 Span<char> initialBuffer = stackalloc char[260];
804 ValueStringBuilder valueStringBuilder = new ValueStringBuilder(initialBuffer);
805 valueStringBuilder.EnsureCapacity(Math.Max(relativeTo.Length, path.Length));
806 if (num < num2)
807 {
808 valueStringBuilder.Append("..");
809 for (int i = num + 1; i < num2; i++)
810 {
811 if (PathInternal.IsDirectorySeparator(relativeTo[i]))
812 {
813 valueStringBuilder.Append(DirectorySeparatorChar);
814 valueStringBuilder.Append("..");
815 }
816 }
817 }
818 else if (PathInternal.IsDirectorySeparator(path[num]))
819 {
820 num++;
821 }
822 int num4 = num3 - num;
823 if (flag)
824 {
825 num4++;
826 }
827 if (num4 > 0)
828 {
829 if (valueStringBuilder.Length > 0)
830 {
831 valueStringBuilder.Append(DirectorySeparatorChar);
832 }
833 valueStringBuilder.Append(path.AsSpan(num, num4));
834 }
835 return valueStringBuilder.ToString();
836 }
static string GetFullPath(string path)
Definition Path.cs:881
static readonly char DirectorySeparatorChar
Definition Path.cs:71
static bool EndsInDirectorySeparator(ReadOnlySpan< char > path)
Definition Path.cs:848

References System.Text.ValueStringBuilder.Append(), System.IO.PathInternal.AreRootsEqual(), System.SR.Arg_PathEmpty, System.comparisonType, System.IO.Path.DirectorySeparatorChar, System.IO.Path.EndsInDirectorySeparator(), System.Text.ValueStringBuilder.EnsureCapacity(), System.IO.PathInternal.GetCommonPathLength(), System.IO.Path.GetFullPath(), System.IO.PathInternal.IsDirectorySeparator(), System.IO.PathInternal.IsEffectivelyEmpty(), System.Text.ValueStringBuilder.Length, System.Math.Max(), and System.Text.ValueStringBuilder.ToString().