C# 将绝对路径转换为相对路径

引言

 

在项目中常需要将绝对路径,转换为相对路径,来增加程序相关配置的的灵活性(不用因为整体挪个位置就导致我们的程序不能正常工作)

 

解决问题方法

 

自己写代码解决:

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

 

相对路径

时间: 2024-10-17 22:27:58

C# 将绝对路径转换为相对路径的相关文章

MVC将服务器端的物理路径转换为服务器路径

以图片为例 后台Controller.cs public FileResult ImageUrl(string file) { return File("物理路径"+file, "image/png"); } 前台.cshtml <img src='@Url.Action("ImageUrl", "控制器名称", new {h.file , area="区域名"})' > 或者 <img

PHP 相对路径转换为绝对路径 realpath

* 相对路径 -> 绝对路径 realpath <?php /** * @param string $in_rel: relative directory * @param string $out_abs: absolute directory */ define('PATH_MAX', 255); function sub_rel2abs(string $in_rel, string &$out_abs) { $i_rtn = 0; // return value $ss_rel =

PHP文本路径转换为链接文字

<?php /** * 文本路径转换为有链接的文字 * @param string $str 转换内容 * @return string */ function urlToLink($str) { $arr = array("www." => "http://www."); $str = strtr($str, $arr); $arr = array("http://http://" => "http://"

Javascript 将图片的绝对路径转换为base64编码

Javascript将图片的绝对路径转换为base64编码 我们可以使用canvas.toDataURL的方法将图片的绝对路径转换为base64编码:在这我们引用的是淘宝首页一张图片如下: var img = "https://img.alicdn.com/bao/uploaded/TB1qimQIpXXXXXbXFXXSutbFXXX.jpg"; 我们如下编写代码: function getBase64Image(img) { var canvas = document.create

Windows文件路径转换为java中可识别的文件路径的转义方法,(另附转义多种格式)

ps:欢迎加qq好友:2318645572,交流学习 一:路径转化 Windows中的文件路径格式为 D:\eclipse\apache-tomcat-7.0.67\wtpwebapps\... Java中的文件路径格式为 D:/eclipse/apache-tomcat-7.0.67/wtpwebapps/... 如果直接用windows的路径,用流写入的时候会抛出异常 在java中使用前者则会报错,所以需要先将Windows中的文件路径转换为java中可识别的路径. 作如下处理: Strin

eclipse部署tomcat修改项目访问路径(虚拟路径)

原文参考: http://www.educity.cn/wenda/147993.html http://blog.163.com/java_zf/blog/static/19926038420129240314546/ tomcat部署web项目(eclipse自动部署项目到tomcat,访问URL中不包含部署名) 最近项目中需要把项目部署到tomcat中,并且访问路径中不包含不署名,且想实现Eclipse中的自动部署,扒了好久资料,最终实现了自己的需求,呵呵,如下: 1. 把项目contex

绝对路径和相对路径

HTML初学者会经常遇到这样一个问题,如何正确引用一个文件. 比如,怎样在一个HTML网页中引用另外一个HTML网页作为超链接(hyperlink)?怎样在一个网页中插入一张图片? 如果你在引用文件时(如加入超链接,或者插入图片等),使用了错误的文件路径,就会导致引用失效(无法浏览链接文件,或无法显示插入的图片等). 为了避免这些错误,正确地引用文件,我们需要学习一下HTML路径. 在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径 1.绝对路径:是从盘符

网站中图片的相对路径与绝对路径

1.相对路径 网站中加载图片所用到的相对路径,相对路径是以网页所在位置为参考的. ../代表上一级目录 src="../../photo/1.png"; src="images/1.jpg"; 2.绝对路径

浅谈 qmake 之 shadow build(就是将源码路径和构建路径分开)

shadow build shadow build 是什么东西?就是将源码路径和构建路径分开(也就是生成的makefile文件和其他产物都不放到源码路径),以此来保证源码路径的清洁. 这不是qmake独创的东西,cmake中早就使用这个东西了   cmake qmake 备注 in-source cmake . qmake project.pro 在源码路径下执行 out-of-source(shadow-build) mkdir build cd buildcmake ../project m