绝对路径转换为相对路径

来源:互联网 发布:工作流 源码 编辑:程序博客网 时间:2024/06/06 03:51

最近写了个工作上要用到的工具,要和同事共用,需要储存各种文件路径,为了保证我们的文件结构相同,且减少文件错乱的问题,在储存文件路径的时候决定用相对路径来实现,就像VS里生成路径一样,随便把项目考到哪个地方都能保持正常运行。

但是网上一搜,悲催了,找了半天没有好到这方面的参考代码或思路什么的,所以自己想了一个傻瓜办法。

算法思路就是:举个列子,比如有参考路径:F:\\A\B\C\D\E

需要转换为相对路径的源路径:F:\\A\B\C-1\C-2\C-3\C-4

先找到两个路径共同的父路径strParent = F:\\A\B,然后把参考路径除了父路径外路径C\D\E转换为相对路径strRelative = ..\..\..\

然后把源路径的strParent替换为strRelative就可以了,很简单吧


下面是源码

        /// <summary>        /// 绝对路径转换为相对路径        /// </summary>        /// <param name="strReferencePath">参考路径</param>        /// <param name="strSourcePath">需要转换的路径</param>        /// <returns>返回转换后的路径</returns>        private string ChangeToRelativePath(string strReferencePath, string strSourcePath)        {            string strReferencePathRoot = Path.GetPathRoot(strReferencePath);            string strSourcePathRoot = Path.GetPathRoot(strSourcePath);            //不同盘符则不转换            if (strReferencePathRoot != strSourcePathRoot)                return strSourcePath;            //先清除末尾的‘\\’            strReferencePath = strReferencePath.TrimEnd('\\');            strSourcePath = strSourcePath.TrimEnd('\\');            string[] arrLocationDirSegment = strReferencePath.Split('\\');            string[] arrSourceDirSegment = strSourcePath.Split('\\');            if (arrLocationDirSegment.Length == 0 || arrSourceDirSegment.Length == 0)                return strSourcePath;            //参考路径和要转换的路径共同的父路径            string strSamePath = strReferencePathRoot;            //参考到父路径的相对路径            string strLocationRelativePath = string.Empty;            //以参考路径分段长度作为循环            for (int i = 1; i < arrLocationDirSegment.Length; i++)            {                if (i < arrSourceDirSegment.Length)                {                    if (arrLocationDirSegment[i] == arrSourceDirSegment[i]) //若相同则为父路径                        strSamePath += arrLocationDirSegment[i] + "\\";                    else //若不同则为当前程序自己的路径,此路径就需要转换为相对路径                        strLocationRelativePath += "..\\";                }                else//若需要转换的路径长度小于当前程序路径,此路径就需要转换为相对路径                    strLocationRelativePath += "..\\";            }            return strSourcePath.Replace(strSamePath, strLocationRelativePath);        }
小弟第一次写博客,有点小兴奋呢,如果大家有更好的想法可以提出来,大家互相交流学习

0 0
原创粉丝点击