| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- //------------------------------------------------------------------------------
- //
- // System.IO.Path.cs
- //
- // Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved
- //
- // Author: Jim Richardson, [email protected]
- // Created: Saturday, August 11, 2001
- //
- //------------------------------------------------------------------------------
- using System;
- using System.PAL;
- namespace System.IO
- {
- public class Path
- {
- private static OpSys _os = Platform.OS;
- public static readonly char AltDirectorySeparatorChar = _os.AltDirectorySeparator;
- public static readonly char DirectorySeparatorChar = _os.DirectorySeparator;
- public static readonly char[] InvalidPathChars = _os.InvalidPathChars;
- public static readonly char PathSeparator = _os.PathSeparator;
- public static readonly char VolumeSeparatorChar = _os.VolumeSeparator;
- private static readonly char[] PathSeparatorChars = { DirectorySeparatorChar,
- AltDirectorySeparatorChar,
- VolumeSeparatorChar };
- // class methods
- public static string ChangeExtension(string path, string extension)
- {
- if(path == null)
- {
- return null;
- }
- int iExt = findExtension(path);
-
- if(iExt < 0)
- {
- return extension == null ? path : path + extension;
- }
- else if(iExt > 0)
- {
- string temp = path.Substring(0, iExt);
- if(extension != null)
- {
- return temp + extension;
- }
- return temp;
- }
- return extension;
- }
- public static string Combine(string path1, string path2)
- {
- if(path1 == null || path2 == null)
- {
- return null;
- }
- CheckArgument.Empty(path2);
- // TODO: Check for invalid DirectoryInfo characters
- // although I don't think it is necesary for linux
- // TODO: Verify functionality further after NUnit tests written
- // since the documentation was rather sketchy
- if(IsPathRooted(path2))
- {
- if(path1.Equals(string.Empty))
- {
- return path2;
- }
- throw new ArgumentException("Rooted path");
- }
-
- string dirSep = new string(DirectorySeparatorChar, 1);
- string altSep = new string(AltDirectorySeparatorChar, 1);
-
- bool b1 = path1.EndsWith(dirSep) || path1.EndsWith(dirSep);
- bool b2 = path2.StartsWith(dirSep) || path2.StartsWith(altSep);
- if(b1 && b2)
- {
- throw new ArgumentException("Invalid combination");
- }
-
- if(!b1 && !b2)
- {
- return path1 + dirSep + path2;
- }
- return path1 + path2;
- }
- public static string GetDirectoryName(string path)
- {
- if(path != null)
- {
- CheckArgument.Empty(path);
- CheckArgument.WhitespaceOnly(path);
- CheckArgument.PathChars(path);
- if(path.Length > 2)
- {
- int nLast = path.LastIndexOfAny(PathSeparatorChars, path.Length - 2);
- if(nLast > 0)
- {
- return path.Substring(0, nLast);
- }
- }
- }
- return path;
- }
- public static string GetExtension(string path)
- {
- if(path == null)
- {
- return string.Empty;
- }
- CheckArgument.Empty(path);
- CheckArgument.WhitespaceOnly(path);
-
- int iExt = findExtension(path);
- int iLastSep = path.LastIndexOfAny( PathSeparatorChars );
- if(iExt > -1)
- { // okay it has an extension
- return path.Substring(iExt);
- }
- return string.Empty;
- }
- public static string GetFileName(string path)
- {
- if(path == null)
- {
- return string.Empty;
- }
- CheckArgument.Empty(path);
- CheckArgument.WhitespaceOnly(path);
- int nLast = path.LastIndexOfAny(PathSeparatorChars);
- if(nLast > 0)
- {
- return path.Substring(nLast + 1);
- }
- return nLast == 0 ? null : path;
- }
- public static string GetFileNameWithoutExtension(string path)
- {
- return ChangeExtension(GetFileName(path), null);
- }
- public static string GetFullPath(string path)
- {
- if(path != null)
- {
- //TODO: Implement this correctly
- return path;
- }
- return null;
- }
- public static string GetPathRoot(string path)
- {
- if(path != null ||
- (path.StartsWith(new string(DirectorySeparatorChar, 1)) ||
- path.StartsWith(new string(AltDirectorySeparatorChar, 1))))
- {
- return path.Substring(0, 1);
- }
- return null;
- }
- public static string GetTempFileName()
- {
- //TODO: Implement method
- return string.Empty;
- }
- /// <summary>
- /// Returns the path of the current systems temp directory
- /// </summary>
- public static string GetTempPath()
- { // TODO: This might vary with distribution and there
- // might be an api to provide it. Research is needed
- return "/tmp";
- }
- public static bool HasExtension(string path)
- {
- CheckArgument.Null(path);
- CheckArgument.Empty(path);
- CheckArgument.WhitespaceOnly(path);
-
- return findExtension(path) > -1;
- }
- public static bool IsPathRooted(string path)
- {
- return path.StartsWith(new string(VolumeSeparatorChar,1));
- }
- // private class methods
- private static int findExtension(string path)
- { // method should return the index of the path extension
- // start or -1 if no valid extension
- if(path != null)
- {
- int iLastDot = path.LastIndexOf(".");
- int iLastSep = path.LastIndexOfAny( PathSeparatorChars );
- if(iLastDot > iLastSep)
- {
- return iLastDot;
- }
- }
- return -1;
- }
- }
- }
|