Combines two path strings. : Path « File Stream « C# / C Sharp

Combines two path strings.


#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 
 * -------------------------------------------------------------------------

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 (</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};
        separators = new char [] {Path.DirectorySeparatorChar};

    /// <summary>
        /// Combines two path strings.
    /// </summary>
    /// <param name="basepath"></param>
    /// <param name="relative"></param>
    /// <returns></returns>    
    public static string Combine (string basepath, string relative)
      if (relative == null || relative.Length == 0)
        throw new ArgumentException ("empty or null", "relative");

      char first = relative [0];
      if (first == '/' || first == '\\' || Path.IsPathRooted (relative))
        throw new ArgumentException ("'relative' is rooted", "relative");

      if (first == '~' && relative.Length > 1 && Array.IndexOf (separators, relative [1]) != -1)
        return Path.Combine (appbase, relative.Substring (2));

      if (basepath == null)
        basepath = appbase;

      return MakeAbsolute (Path.Combine (basepath, relative));
    /// <summary>
    /// </summary>    
    /// <param name="abspath"></param>
    /// <returns></returns>
    /// <remarks>Authors: Gonzalo Paniagua Javier (</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;

        if (parts [i] == "..") 
          hasDots = true;
          if (valid.Count > 0)
            valid.RemoveAt (valid.Count - 1);

        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;



Related examples in the same category

1.Paths in C#
3.Use static methods in Path
4.Resolve Path
5.Map Path
6.File Path Collection
7.Directory listing
8.Gets a list of files
9.Get Relative Path
10.Make Absolute Path
11.Split the path into array of string
12.Get Application Relative Path
13.Performs operations on String instances that contain file or directory path information.
14.Get temp path
15.Get full path
16.Get temp file name
17.Combines two strings into a path.
18.Combines three strings into a path.
19.Combines four strings into a path.
20.Combines an array of strings into a path.
21.Get a list of invalid path characters.
22.Get a list of invalid file characters.
23.creates a relative path to "targetFile" that is relative to "path"
24.Creates a relative path from one file or folder to another.
25.Copies the specified resource to a temporary file and returns its path.
26.Is valid path name
27.Get Application Path
28.Calculate Relative Path
29.Combine paths
30.Gets the path of the current request relative to the application base path.
31.Redirects to a path relative to the application base path.
32.Gets the relative path from a source to a target path.
33.Gets the common root path of the given path list.
34.Relative Paths
35.Checks if path provided corresponds to a directory.
36.Compares two rooted paths for equality. Any of the paths provided may end with path separator - it will be ignored.
37.Combines two paths, removing root-folder combinations.
38.Combine base Path and relative Path
39.Get Execution Path
40.Get relative path (2)
41.Formats the path.
42.Gets the relative path.
43.Checks a directory path and returns a normalized form with trailing
44.Returns the path argument adjusted to be relative to the base path. Absolute path names will be returned unchanged.