Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-08-2005
triskel triskel is offline
Miembro
 
Registrado: sep 2003
Ubicación: Vigo
Posts: 26
Poder: 0
triskel Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 09-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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>
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 09-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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

Última edición por roman fecha: 09-08-2005 a las 06:26:21.
Responder Con Cita
  #4  
Antiguo 09-08-2005
triskel triskel is offline
Miembro
 
Registrado: sep 2003
Ubicación: Vigo
Posts: 26
Poder: 0
triskel Va por buen camino
Gracias por la ayuda, me fue muy util!!
Responder Con Cita
  #5  
Antiguo 09-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por roman
¿Qué tal algo así?
¡Mucho mejor, dónde va a parar!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 15-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:04:46.


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
Copyright 1996-2007 Club Delphi