| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- //------------------------------------------------------------------------------
- //
- // 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;
- internal static readonly string DirectorySeparatorStr = _os.DirectorySeparator + "";
- 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;
- }
- [MonoTODO]
- 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)
- throw (new ArgumentNullException (
- "path",
- "You must specify a path when calling System.IO.Path.GetFullPath"));
- if (path.StartsWith (new string (DirectorySeparatorChar, 1)) ||
- path.StartsWith (new string (AltDirectorySeparatorChar, 1)))
- return path;
- return Directory.GetCurrentDirectory () + new string (DirectorySeparatorChar, 1) + path;
- }
- 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;
- }
- [MonoTODO]
- public static string GetTempFileName ()
- {
- //TODO: Implement method
- return string.Empty;
- }
- /// <summary>
- /// Returns the path of the current systems temp directory
- /// </summary>
- [MonoTODO]
- 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;
- }
- }
- }
|