Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Carpeta o Unidad de disco?? (https://www.clubdelphi.com/foros/showthread.php?t=24104)

triskel 08-08-2005 22:53:33

Carpeta o Unidad de disco??
 
Hola,

Tengo un string, que es una ruta y necesito saber si esa ruta es una carpeta o una unidad de disco.
Si uso DirectoryExist me devuelve TRUE tanto para 'C:\Test' como para 'C:\'.
¿Alguna idea de como hacerlo?

Gracias por la ayuda

TrisKel

dec 09-08-2005 01:10:04

Hola,

No sé si se me escapará algo, es muy problable, pero, a ver qué tal parece esto:

Código Delphi [-]
<div align="left">// Indica si una ruta es solo una unidad o no.
// Ej. C:\ resultaría True, C:\Windows\ False.
//
function RutaEsSoloUnidad(ruta: string): boolean;
resourcestring
  rsErrorNoDir = 'El directorio especificado no existe';
var
  unidad, resto: string;
begin
  Result := true; // Por defecto
  // Extraemos la unidad de la ruta
  unidad := ExtractFileDrive(ruta);
  // Obtenemos el resto de la ruta
  resto := AnsiReplaceStr(ruta, unidad, '');
  if (resto <> '\') and (resto <> '')
    and DirectoryExists(unidad + resto) then
      Result := false; // No es solo la unidad
  // ¿Pero existe el directorio en la ruta?
  if not DirectoryExists(unidad + resto) then
    raise EInOutError.Create(rsErrorNoDir);
end;div>
<div align="left">// Ejemplo de llamada a la función
//
procedure TForm1.Button1Click(Sender: TObject);
begin
  if RutaEsSoloUnidad('C:\') then
    ShowMessage('Es solo una unidad')
  else ShowMessage('Es otro camino');
end;div>

roman 09-08-2005 06:21:35

¿Qué tal algo así?

Código Delphi [-]
function IsDrive(S: String): Boolean;
begin
  Result := IncludeTrailingPathDelimiter(ExtractFileDrive(S)) = S;
end;

IsDrive no detecta si la ruta especificada por S realmente existe, simplemente determina si es de la forma X:\

EDITO

Otra opción

Código Delphi [-]
uses
  Masks;

function IsDrive(S: String): Boolean;
begin
  Result :=MatchesMask(S, '[a-z]:\');
end;

// Saludos

triskel 09-08-2005 10:58:20

Gracias por la ayuda, me fue muy util!!

dec 09-08-2005 15:11:56

Hola,

Cita:

Empezado por roman
¿Qué tal algo así?

¡Mucho mejor, dónde va a parar! ;)

dec 15-09-2005 17:19:27

Hola,

Me permito añadir una línea a una de las funciones escritas por roman más arriba, de tal modo que quede como sigue:

Código Delphi [-]
 uses
   Masks;
 
 function IsDrive(S: String): Boolean;
 begin
   S := IncludeTrailingPathDelimiter(S);
   Result := MatchesMask(S,  '[a-z]:\');
 end;
De ese modo la función devolverá "True" tanto si se pasa como parámetro "C:\" como si se pasa "C:", por ejemplo. ;)


La franja horaria es GMT +2. Ahora son las 21:41:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi