C# 将绝对路径转换为相对路径
2016-05-19 08:14
495 查看
引言
在项目中常需要将绝对路径,转换为相对路径,来增加程序相关配置的的灵活性(不用因为整体挪个位置就导致我们的程序不能正常工作)
解决问题方法
自己写代码解决:private string RelativePath(string absolutePath, string relativeTo) { string[] absoluteDirectories = absolutePath.Split('\\'); string[] relativeDirectories = relativeTo.Split('\\'); //Get the shortest of the two paths int length = absoluteDirectories.Length < relativeDirectories.Length ? absoluteDirectories.Length : relativeDirectories.Length; //Use to determine where in the loop we exited int lastCommonRoot = -1; int index; //Find common root for (index = 0; index < length; index++) if (absoluteDirectories[index] == relativeDirectories[index]) lastCommonRoot = index; else break; //If we didn't find a common prefix then throw if (lastCommonRoot == -1) throw new ArgumentException("Paths do not have a common base"); //Build up the relative path StringBuilder relativePath = new StringBuilder(); //Add on the .. for (index = lastCommonRoot + 1; index < absoluteDirectories.Length; index++) if (absoluteDirectories[index].Length > 0) relativePath.Append("..\\"); //Add on the folders for (index = lastCommonRoot + 1; index < relativeDirectories.Length - 1; index++) relativePath.Append(relativeDirectories[index] + "\\"); relativePath.Append(relativeDirectories[relativeDirectories.Length - 1]); return relativePath.ToString(); }
通过C#中URI类来解决:
System.Uri uri1 = new Uri(@"C:\filename.txt"); System.Uri uri2 = new Uri(@"C:\mydirectory\anotherdirectory\"); Uri relativeUri = uri2.MakeRelativeUri(uri1); Console.WriteLine(relativeUri.ToString());
参考文献
http://msdn.microsoft.com/en-us/library/system.uri.makerelativeuri(v=vs.110).aspx
相关文章推荐
- 转载 C#中敏捷开发规范
- 转载 C#中使用结构来传递多个参数
- C# 调用webservice 几种办法(转载)
- C#/list定义的一些扩展
- C#/获取本机IP的代码
- C#/GetType()与typeof
- C#控制台程序的参数解析类库 CommandLine简单使用说明
- Visual C#编写3D游戏框架示例
- C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享
- C# 设置Excel打印选项及打印excel文档
- C#读取excel文件,报“外部表不是预期的格式”的解决办法
- C# GDI绘制矩形框,鼠标左键拖动可移动矩形框,滚轮放大缩小矩形框
- C# 设置Excel打印选项及打印excel文档
- 学习一下C#的深拷贝
- .net CallBack::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩
- CLR Via C# 第一章(CLR的执行模型)——读书笔记
- C#中的特性(Attributes)
- c#直接读写物理硬盘引导区
- c#控件随屏幕分辨率的变化而变化
- c#的泛型