File Stream C#

#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
{
  /// 
  ///  Path handling utility methods that are not available in System.IO.Path
  /// 

    /// Authors: Gonzalo Paniagua Javier (gonzalo@ximian.com)
  public sealed class PathUtils
  {
    static string appbase;
    static char [] separators;
    private PathUtils()
    {    
    }
        
    /// 
    /// Static Constructor
    /// 
    
    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};
    }
    /// 
    /// 
    /// 
    
    /// 
    /// 
    /// Authors: Gonzalo Paniagua Javier (gonzalo@ximian.com)
    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;
    }
    }
}