Mega Code Archive

 
Categories / C# / File Stream
 

Make Absolute Path

#region License and Copyright /* -------------------------------------------------------------------------  * Dotnet Commons IO  *  *  * This library is free software; you can redistribute it and/or modify it   * under the terms of the GNU Lesser General Public License as published by   * the Free Software Foundation; either version 2.1 of the License, or   * (at your option) any later version.  *  * This library is distributed in the hope that it will be useful, but   * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY   * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License   * for more details.   *  * You should have received a copy of the GNU Lesser General Public License   * along with this library; if not, write to the   *   * Free Software Foundation, Inc.,   * 59 Temple Place,   * Suite 330,   * Boston,   * MA 02111-1307   * USA   *   * -------------------------------------------------------------------------  */ #endregion using System; using System.Collections; using System.IO; using System.Reflection; using System.Web; namespace Dotnet.Commons.IO {   /// <summary>   ///  Path handling utility methods that are not available in System.IO.Path   /// </summary>     /// <remarks>Authors: Gonzalo Paniagua Javier (gonzalo@ximian.com)</remarks>   public sealed class PathUtils   {     static string appbase;     static char [] separators;     private PathUtils()     {         }              /// <summary>     /// Static Constructor     /// </summary>         static PathUtils ()     {             Assembly entry = Assembly.GetEntryAssembly ();       appbase = Path.GetDirectoryName (entry.Location);              if (Path.DirectorySeparatorChar != Path.AltDirectorySeparatorChar)         separators = new char [] {Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar};       else         separators = new char [] {Path.DirectorySeparatorChar};     }     /// <summary>     ///      /// </summary>         /// <param name="abspath"></param>     /// <returns></returns>     /// <remarks>Authors: Gonzalo Paniagua Javier (gonzalo@ximian.com)</remarks>     public static string MakeAbsolute (string abspath)     {              string [] parts = abspath.Split (separators);       ArrayList valid = new ArrayList ();       int len = parts.Length;       bool hasDots = false;       for (int i = 0; i < len; i++)        {         if (parts [i] == ".")          {           hasDots = true;           continue;         }         if (parts [i] == "..")          {           hasDots = true;           if (valid.Count > 0)             valid.RemoveAt (valid.Count - 1);           continue;         }         valid.Add (parts [i]);       }       if (!hasDots)         return abspath;       parts = (String []) valid.ToArray (typeof (string));       string result = String.Join (new String (Path.DirectorySeparatorChar, 1), parts);       if (!Path.IsPathRooted (result))         return Path.DirectorySeparatorChar + result;       return result;     }     } }