Make Absolute Path

image_pdfimage_print
   
 

#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 &#91;i&#93; == ".") 
        {
          hasDots = true;
          continue;
        }

        if (parts &#91;i&#93; == "..") 
        {
          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;
    }
    }
}

   
     


This entry was posted in File Stream. Bookmark the permalink.