![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #region 计算相对路径
2
3 /// <summary>
4 /// 获取路径2相对于路径1的相对路径
5 /// </summary>
6 /// <param name="strPath1">路径1</param>
7 /// <param name="strPath2">路径2</param>
8 /// <returns>相对路径</returns>
9 private string GetRelativePath(string strPath1, string strPath2)
10 {
11 //格式化字符串成标准的格式
12
13 strPath1 = strPath1.Replace("//", "\\");
14 strPath1 = strPath1.Replace("/", "\\");
15 strPath1 = strPath1.Replace(@"\\", "\\");
16 strPath2 = strPath2.Replace("//", "\\");
17 strPath2 = strPath2.Replace("/", "\\");
18 strPath2 = strPath2.Replace(@"\\", "\\");
19 int intIndex = -1, intPos = strPath1.IndexOf('\\');
20
21 /*以"\"为分界比较从开始处到第一个"\"处对两个地址进行比较,如果相同则扩展到
22 下一个"\"处;直到比较出不同或第一个地址的结尾*/
23
24 while (intPos >= 0)
25 {
26 intPos++;
27 if (string.Compare(strPath1, 0, strPath2, 0, intPos, true) != 0) break;
28 intIndex = intPos;
29 intPos = strPath1.IndexOf('\\', intPos);
30 }
31
32 /*如果从不是第一个"\"处开始有不同,则从最后一个发现有不同的"\"处开始将strPath2
33 的后面部分赋值给自己,在strPath1的同一个位置开始望后计算每有一个"\"则在strPath2
34 的前面加上一个"..\"(经过转义后就是"..\\")*/
35
36 if (intIndex >= 0)
37 {
38 strPath2 = strPath2.Substring(intIndex);
39 intPos = strPath1.IndexOf("\\", intIndex);
40 while (intPos >= 0)
41 {
42 strPath2 = "..\\" + strPath2;
43 intPos = strPath1.IndexOf("\\", intPos + 1);
44 }
45 }
46
47 //否则直接返回strPath2
48 return strPath2;
49 }
50
51 #endregion
2
3 /// <summary>
4 /// 获取路径2相对于路径1的相对路径
5 /// </summary>
6 /// <param name="strPath1">路径1</param>
7 /// <param name="strPath2">路径2</param>
8 /// <returns>相对路径</returns>
9 private string GetRelativePath(string strPath1, string strPath2)
10 {
11 //格式化字符串成标准的格式
12
13 strPath1 = strPath1.Replace("//", "\\");
14 strPath1 = strPath1.Replace("/", "\\");
15 strPath1 = strPath1.Replace(@"\\", "\\");
16 strPath2 = strPath2.Replace("//", "\\");
17 strPath2 = strPath2.Replace("/", "\\");
18 strPath2 = strPath2.Replace(@"\\", "\\");
19 int intIndex = -1, intPos = strPath1.IndexOf('\\');
20
21 /*以"\"为分界比较从开始处到第一个"\"处对两个地址进行比较,如果相同则扩展到
22 下一个"\"处;直到比较出不同或第一个地址的结尾*/
23
24 while (intPos >= 0)
25 {
26 intPos++;
27 if (string.Compare(strPath1, 0, strPath2, 0, intPos, true) != 0) break;
28 intIndex = intPos;
29 intPos = strPath1.IndexOf('\\', intPos);
30 }
31
32 /*如果从不是第一个"\"处开始有不同,则从最后一个发现有不同的"\"处开始将strPath2
33 的后面部分赋值给自己,在strPath1的同一个位置开始望后计算每有一个"\"则在strPath2
34 的前面加上一个"..\"(经过转义后就是"..\\")*/
35
36 if (intIndex >= 0)
37 {
38 strPath2 = strPath2.Substring(intIndex);
39 intPos = strPath1.IndexOf("\\", intIndex);
40 while (intPos >= 0)
41 {
42 strPath2 = "..\\" + strPath2;
43 intPos = strPath1.IndexOf("\\", intPos + 1);
44 }
45 }
46
47 //否则直接返回strPath2
48 return strPath2;
49 }
50
51 #endregion