• 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);
            }
    
    
        }
    
  • 相关阅读:
    20210805-接口测试实战(持续更新中···)
    2021-07-06:关于自动化测试
    学习记录-更新时间-2021-04-09
    知识点@解决端口被占用的问题
    PS学习笔记
    JS去掉数组中重复的数
    验证码倒计时
    统计数组中出现最多的字母及次数
    验证码倒计时js
    小兔鲜css
  • 原文地址:https://www.cnblogs.com/MaFeng0213/p/8919919.html
Copyright © 2020-2023  润新知