zoukankan      html  css  js  c++  java
  • C# 文件绝对路径与相对路径的转换

     class Program
        {
            const string CONFIG_PATH = @"C:SoftWareConfig.xml";
            const string IMAGE_PATH = @"C:SoftWareResourceImg1.png";
            const string DATA_DIR = @"C:SoftWareData";
    
            /// <summary>
            /// Creates a relative path from one file
            /// or folder to another.
            /// </summary>
            /// <param name="fromDirectory">
            /// Contains the directory that defines the
            /// start of the relative path.
            /// </param>
            /// <param name="toPath">
            /// Contains the path that defines the
            /// endpoint of the relative path.
            /// </param>
            /// <returns>
            /// The relative path from the start
            /// directory to the end path.
            /// </returns>
            /// <exception cref="ArgumentNullException"></exception>
            static string MakeRelative(string fromDirectory, string toPath)
            {
                if (fromDirectory == null)
                    throw new ArgumentNullException("fromDirectory");
    
                if (toPath == null)
                    throw new ArgumentNullException("toPath");
    
                bool isRooted = (Path.IsPathRooted(fromDirectory) && Path.IsPathRooted(toPath));
    
                if (isRooted)
                {
                    bool isDifferentRoot = (string.Compare(Path.GetPathRoot(fromDirectory), Path.GetPathRoot(toPath), true) != 0);
    
                    if (isDifferentRoot)
                        return toPath;
                }
    
                List<string> relativePath = new List<string>();
                string[] fromDirectories = fromDirectory.Split(Path.DirectorySeparatorChar);
    
                string[] toDirectories = toPath.Split(Path.DirectorySeparatorChar);
    
                int length = Math.Min(fromDirectories.Length, toDirectories.Length);
    
                int lastCommonRoot = -1;
    
                // find common root
                for (int x = 0; x < length; x++)
                {
                    if (string.Compare(fromDirectories[x], toDirectories[x], true) != 0)
                        break;
    
                    lastCommonRoot = x;
                }
    
                if (lastCommonRoot == -1)
                    return toPath;
    
                // add relative folders in from path
                for (int x = lastCommonRoot + 1; x < fromDirectories.Length; x++)
                {
                    if (fromDirectories[x].Length > 0)
                        relativePath.Add("..");
                }
    
                // add to folders to path
                for (int x = lastCommonRoot + 1; x < toDirectories.Length; x++)
                {
                    relativePath.Add(toDirectories[x]);
                }
    
                // create relative path
                string[] relativeParts = new string[relativePath.Count];
                relativePath.CopyTo(relativeParts, 0);
    
                string newPath = string.Join(Path.DirectorySeparatorChar.ToString(), relativeParts);
    
                return newPath;
            }
            static string MakeAbsolute(string fromPath, string toPath)
            {
                string temp = Path.Combine(fromPath, toPath);
                return Path.GetFullPath(temp);
            }
    
            static void Main(string[] args)
            {
                string pImageRelativePath = MakeRelative(CONFIG_PATH, IMAGE_PATH);
                // ..ResourceImg1.png
                Console.WriteLine("图片文件的相对路径为:{0}", pImageRelativePath);
                
                string pImageAbsolutePath = MakeAbsolute(CONFIG_PATH, pImageRelativePath);
                //C:SoftWareResourceImg1.png
                Console.WriteLine("图片文件的绝对路径为:{0}", pImageAbsolutePath);
    
                string pDataRelativeDir = MakeRelative(CONFIG_PATH, DATA_DIR);
                // ..Data
                Console.WriteLine("数据文件夹的相对路径:{0}", pDataRelativeDir);
    
                string pDataAbsoluteDir = MakeAbsolute(CONFIG_PATH, pDataRelativeDir);
                // C:SoftWareData
                Console.WriteLine("数据文件夹的绝对路径:{0}", pDataAbsoluteDir);
            }
    
    
        }
    
  • 相关阅读:
    jQueryMobile(二)
    (六)JavaScript之[Regular Expression]与[错误(try, catch, throw)]
    18-metaclass,是潘多拉魔盒还是阿拉丁神灯?
    17-强大的装饰器
    15-Python对象的比较、拷贝
    13-搭建积木:Python模块化
    12-面向对象(下):如何实现一个搜索引擎?
    11-面向对象(上):从生活中的类比说起
    10-简约不简单的匿名函数
    09-不可或缺的自定义函数
  • 原文地址:https://www.cnblogs.com/MaFeng0213/p/8919919.html
Copyright © 2011-2022 走看看