PDA

Ver la Versión Completa : Función ghDir


Al González
24-03-2013, 08:12:59
Extrae el lado izquierdo de una ruta hasta una de sus partes padre.

Unidad

GHFRTL

Declaración
{ Directory }
Function ghDir (Const Path :String; Const UpLevels :Integer = 1;
Const APathDelim :Char = PathDelim; Const ConsiderRoot :Boolean = True)
:String; Overload;

{ Directory }
Function ghDir (Const Path :String; Const UpLevels :Integer;
Const ConsiderRoot :Boolean) :String; Overload;

{ Directory }
Function ghDir (Const Path :String; Const APathDelim :Char;
Const ConsiderRoot :Boolean = True) :String; Overload;

{ Directory }
Function ghDir (Const Path :String; Const ConsiderRoot :Boolean) :String;
Overload;

Descripción

La función ghDir toma una cadena de caracteres seccionada en partes delimitadas por un carácter especial —comúnmente una ruta de archivo o directorio— , y devuelve ésta pero truncada hasta una de esas partes. UpLevels señala cuántos niveles debe "subir" para obtener la subcadena a devolver. APathDelim indica cuál es el carácter que separa las distintas partes de la cadena. ConsiderRoot determina si el resultado debe o no debe conservar la barra diagonal inversa en su extremo derecho cuando se trate de la raíz de una unidad de disco, o si la raíz de una ruta UNC puede o no puede ser fraccionada.

Parámetros

Path — Una cadena de caracteres que exprese una ruta de archivo, directorio, página Web, llave del registro, elemento XML o algo similar. Si es una cadena vacía, el resultado también lo será.

UpLevels — Indica la cantidad de partes de la ruta Path que la función contará de derecha a izquierda para determinar el final de la subruta a devolver. Debe ser un entero menor a la cantidad de partes que componen la ruta Path, o de lo contrario ghDir devolverá una cadena vacía. Si es menor a 1, la función devolverá la misma cadena de caracteres contenida en Path, pero quitando de su extremo derecho el carácter APathDelim en caso de tenerlo ahí y de que no represente el directorio raíz de una unidad de disco, siempre que esto último deba ser tomado en cuenta (ver descripción de ConsiderRoot). Este parámetro puede omitirse, su valor predeterminado es 1.

APathDelim — Indica cuál es el carácter usado en la ruta Path para separación de sus partes. Si Path no contiene ese carácter, se entenderá que la ruta es de una sola parte. Este parámetro puede omitirse, su valor predeterminado es el de la constante nativa PathDelim, la barra diagonal inversa que en Windows se emplea como delimitador de directorios ('\').

ConsiderRoot — Este parámetro se refiere a la "raíz" de una ruta local o de red y sólo tiene efecto si APathDelim es igual a la constante nativa PathDelim. Cuando es True, ghDir trata de manera especial a la cadena de caracteres Path si esta inicia especificando una unidad de disco (X:\...) o un recurso de red en formato UNC (\\XXX\XXX\...). Si la ruta comienza con una unidad de disco y la función va a devolver solamente esa primera parte, se incluirá la barra diagonal inversa en el resultado ('C:\' en lugar de 'C:'). Si la ruta es de tipo UNC, ghDir considerará indivisible todo lo que esté antes de la cuarta barra diagonal inversa ('\\Server\C\Docs' podrá dividirse en sólo dos partes: '\\Server\C' y 'Docs'). Lo anterior permite obtener rutas de directorio sintácticamente válidas para el sistema de archivos de Windows, pero si ConsiderRoot es False o el parámetro APathDelim no es la barra diagonal inversa, ghDir no tendrá miramiento especial sobre la raíz de la ruta dada. Este parámetro puede omitirse, su valor predeterminado es True.

Ejemplos
S := ghDir ('C:\Run\Lola\Run\Readme.txt');
// S = 'C:\Run\Lola\Run'

S := ghDir ('C:\Run\Lola\Run\Readme.txt', 2);
// S = 'C:\Run\Lola'

S := ghDir ('C:\Run\Lola\Run\Readme.txt', 3);
// S = 'C:\Run'

S := ghDir ('C:\Run\Lola\Run\Readme.txt', 4);
// S = 'C:\'

S := ghDir ('C:\Run\Lola\Run\Readme.txt', 4, '\', False);
// S = 'C:'

S := ghDir ('C:\Run\Lola\Run\Readme.txt', 5);
// S = ''

S := ghDir ('C:\Mr\Smith\Goes\To\Washington');
// S = 'C:\Mr\Smith\Goes\To'

S := ghDir ('C:\Mr\Smith\Goes\To\Washington\');
// S = 'C:\Mr\Smith\Goes\To'

S := ghDir ('C:\Mr\Smith\Goes\To\Washington\', 2);
// S = 'C:\Mr\Smith\Goes'

S := ghDir ('Django/Unchained', '/');
// S = 'Django'

S := ghDir ('The/Awful/Truth', '/');
// S = 'The/Awful'

S := ghDir ('The/Awful/Truth', 2, '/');
// S = 'The'

S := ghDir ('Black Swan');
// S = ''

S := ghDir ('Black Swan', 0);
// S = 'Black Swan'

S := ghDir ('Cinema\Paradiso');
// S = 'Cinema'

S := ghDir ('Cinema\Paradiso', 0);
// S = 'Cinema\Paradiso'

S := ghDir ('Cinema\Paradiso', -8);
// S = 'Cinema\Paradiso'

S := ghDir ('C:\Le Havre\', 0);
// S = 'C:\Le Havre'

S := ghDir ('C:\Le Havre\');
// S = 'C:\'

S := ghDir ('C:\Le Havre');
// S = 'C:\'

S := ghDir ('C:\Le Havre', False);
// S = 'C:'

S := ghDir ('r:\d:\w:');
// S = 'r:\d:'

S := ghDir ('r:\d:\w:', 2);
// S = 'r:\'

S := ghDir ('r:\d:\w:', 2, False);
// S = 'r:'

S := ghDir ('\\Three\Colors\Blue');
// S = '\\Three\Colors'

S := ghDir ('\\Three\Colors\Blue', 2);
// S = ''

S := ghDir ('\\Three\Colors\Blue', 2, False);
// S = '\\Three'

S := ghDir ('\\Three\Colors\Blue', 3, False);
// S = '\'

S := ghDir ('\\Three\Colors\', 0);
// S = '\\Three\Colors'

S := ghDir ('C:\', 0);
// S = 'C:\'

S := ghDir ('');
// S = ''