Datei: NDOPackage/ExtendedPath.cs

Last Commit (4a7e8ab)
1 //
2 // Copyright (c) 2002-2019 Mirko Matytschak
3 // (www.netdataobjects.de)
4 //
5 // Author: Mirko Matytschak
6 //
7 // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
8 // documentation files (the "Software"), to deal in the Software without restriction, including without limitation
9 // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
10 // Software, and to permit persons to whom the Software is furnished to do so, subject to the following
11 // conditions:
12
13 // The above copyright notice and this permission notice shall be included in all copies or substantial portions
14 // of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
17 // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19 // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 // DEALINGS IN THE SOFTWARE.
21
22
23 using System;
24 using System.IO;
25
26 namespace NETDataObjects. NDOVSPackage
27 {
28 ····/// <summary>
29 ····/// Zusammenfassung für ExtendedPath.
30 ····/// </summary>
31 ····public class ExtendedPath
32 ····{
33 ········public static string GetRelativePath(string referencePath, string targetPath)
34 ········{
35 ············string pathRoot1;
36 ············string pathRoot2;
37
38 ············pathRoot1 = Path.GetPathRoot(referencePath);
39 ············pathRoot2 = Path.GetPathRoot(targetPath);
40 ············if (pathRoot1 == string.Empty && pathRoot2 == string.Empty)
41 ················throw new ArgumentException("Can't compute the relative path of two relative paths", "targetPath");
42
43 ············if (String.Compare(pathRoot1, pathRoot2, true) != 0) // includes pathRoot1 == empty
44 ················return targetPath;
45
46 ············string rumpf1 = referencePath.Substring(pathRoot1.Length);
47 ············string rumpf2 = targetPath.Substring(pathRoot2.Length);
48 if ( rumpf1. EndsWith( "\\") || rumpf1. EndsWith( "/") )
49 rumpf1 = rumpf1. Substring( 0, rumpf1. Length - 1) ;
 
 
50
51 ············char[] sepChars = new char[]{Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar};
52 ············string[] arr1 = rumpf1.Split(sepChars);
53 ············string[] arr2 = rumpf2.Split(sepChars);
54
55 ············int i;
56 ············for (i = 0; i < Math.Min(arr1.Length, arr2.Length); i++)
57 ············{
58 ················if (string.Compare(arr1[i], arr2[i], true) != 0)
59 ····················break;
60 ············}
61
62 ············string result = string.Empty;
63 ············string backpath = ".." + Path.DirectorySeparatorChar;
64 ············for (int j = arr1.Length - 1; j >= i; j--)
65 ············{
66 ················result += backpath;
67 ············}
68 ············for (int j = i; j < arr2.Length; j++)
69 ············{
70 ················result += arr2[j];
71 ················if (j < arr2.Length - 1)
72 ····················result += Path.DirectorySeparatorChar;
73 ············}
74
75 ············return result;
76 ········}
77 ····}
78 }
79
New Commit (3030986)
1 //
2 // Copyright (c) 2002-2019 Mirko Matytschak
3 // (www.netdataobjects.de)
4 //
5 // Author: Mirko Matytschak
6 //
7 // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
8 // documentation files (the "Software"), to deal in the Software without restriction, including without limitation
9 // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
10 // Software, and to permit persons to whom the Software is furnished to do so, subject to the following
11 // conditions:
12
13 // The above copyright notice and this permission notice shall be included in all copies or substantial portions
14 // of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
17 // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19 // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 // DEALINGS IN THE SOFTWARE.
21
22
23 using System;
24 using System.IO;
25
26 namespace NDOVsPackage
27 {
28 ····/// <summary>
29 ····/// Zusammenfassung für ExtendedPath.
30 ····/// </summary>
31 ····public class ExtendedPath
32 ····{
33 ········public static string GetRelativePath(string referencePath, string targetPath)
34 ········{
35 ············string pathRoot1;
36 ············string pathRoot2;
37
38 ············pathRoot1 = Path.GetPathRoot(referencePath);
39 ············pathRoot2 = Path.GetPathRoot(targetPath);
40 ············if (pathRoot1 == string.Empty && pathRoot2 == string.Empty)
41 ················throw new ArgumentException("Can't compute the relative path of two relative paths", "targetPath");
42
43 ············if (String.Compare(pathRoot1, pathRoot2, true) != 0) // includes pathRoot1 == empty
44 ················return targetPath;
45
46 ············string rumpf1 = referencePath.Substring(pathRoot1.Length);
47 ············string rumpf2 = targetPath.Substring(pathRoot2.Length);
48 var dsc = Path. DirectorySeparatorChar;
49 var adsc = Path. AltDirectorySeparatorChar;
50
51 ············rumpf1 = rumpf1.TrimEnd(dsc, adsc);
52
53 ············char[] sepChars = new char[]{Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar};
54 ············string[] arr1 = rumpf1.Split(sepChars);
55 ············string[] arr2 = rumpf2.Split(sepChars);
56
57 ············int i;
58 ············for (i = 0; i < Math.Min(arr1.Length, arr2.Length); i++)
59 ············{
60 ················if (string.Compare(arr1[i], arr2[i], true) != 0)
61 ····················break;
62 ············}
63
64 ············string result = string.Empty;
65 ············string backpath = ".." + Path.DirectorySeparatorChar;
66 ············for (int j = arr1.Length - 1; j >= i; j--)
67 ············{
68 ················result += backpath;
69 ············}
70 ············for (int j = i; j < arr2.Length; j++)
71 ············{
72 ················result += arr2[j];
73 ················if (j < arr2.Length - 1)
74 ····················result += Path.DirectorySeparatorChar;
75 ············}
76
77 ············return result;
78 ········}
79 ····}
80 }
81