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 07-02-2007
waltrapa waltrapa is offline
Registrado
 
Registrado: may 2006
Posts: 3
Poder: 0
waltrapa Va por buen camino
FindFirst

Buenos dias tengo un pequeño problema y no se si alguien puede ayudarme.

Tengo el siguiente código que recorre un directorio en busca de ficheros de texto para ser tratados con la función FindFirst.

Código:
  try
    FileAttrs:=SysUtils.faAnyFile;
    if(FindFirst(self.FPath + '*.txt',FileAttrs,Filename)=0) then
    begin
      repeat
        if (FileName.Attr and FileAttrs)=FileName.Attr then
        begin
El problema viene en el último if donde valido los atributos. En ocasiones y sin aparentemente seguir un orden lógico, algunos archivos no "pasan" la validación del if y por tanto no se tratan. He validado los atributos de estos archivos y no he encontrado nada extraño.
¿Alguien se ha encontrado con este mismo problema? Gracias.
Responder Con Cita
  #2  
Antiguo 07-02-2007
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 estoy cien por cien seguro pero creo que la condición debería quedar algo así:

Código Delphi [-]
if (FileName.Attr and FileAttrs) = FileAttrs then

Edito: Parece que no es como yo digo (luego de revisar en la ayuda) y es como tú dices.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 07-02-2007 a las 12:12:28.
Responder Con Cita
  #3  
Antiguo 07-02-2007
waltrapa waltrapa is offline
Registrado
 
Registrado: may 2006
Posts: 3
Poder: 0
waltrapa Va por buen camino
FindFirst

Buenas Dec, primero muchas gracias por tu rapida respuesta.
He probado lo que me comentabas y no me ha funcionado.
He consultado la ayuda de Delphi y creo que según el ejemplo que allí aparece la sintaxis es correcta.
Lo más curioso del tema es que este proceso funciona bien, solo que en algunas ocasiones para algunos ficheros de forma extraña no funciona y los ficheros no parecen tener nada extraño.
Responder Con Cita
  #4  
Antiguo 07-02-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Código Delphi [-]
 sr: TSearchRec;

    if findFirst(FTempDir + '*.*',faAnyFile ,sr) = 0 THEN
     REPEAT
     DeleteFile(FTempDir + SR.Name);
     until FindNext(sr) <> 0;
     FindClose(sr);

Esto si funciona... No veo el final de tu bucle...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #5  
Antiguo 07-02-2007
waltrapa waltrapa is offline
Registrado
 
Registrado: may 2006
Posts: 3
Poder: 0
waltrapa Va por buen camino
Muchas gracias por la ayuda que me habeis dado.
Sobre lo que comentabas he probado el código que me has pasado y efectivamente funciona. Gracias de nuevo.
Sin embargo donde tengo el problema es en el if que evalua los atributos del fichero que debe tratar:

Código Delphi [-]
if (FileName.Attr and FileAttrs)=FileName.Attr then

El problema es que como me pasa de forma aleatória es dificil de encontrar el porque, pero creo que tal vez lo haya descubierto.
Os cuento a ver si esto tiene lógica:

Mirando la ayuda con relación a Filename.Attr menciona que devuelve los atributos del fichero. Entre otros puede tomar dos constantes, faArchive y faSysLink con los valores 32 y 64 respectivamente. En una de las ocasiones que he conseguido reproducir el valor he visto que mientras que yo esperaba recibir un valor 32 (faArchive) me llegaba un 64.
Estos archivos no los copio yo sino que solo los recibo y trato. Con esto si abro uno de los ficheros y lo grabo de nuevo, funciona.
Entiendo por tanto que en ocasiones estos archivos no me los graban de forma correcta o bien los atributos no estan correctos.

Después de este rollo he optado por cargarme el if y validar de otras formas.

Por cierto sobre el final del bucle, este trata el fichero y acaba con un FindNext, pero como en principio ví que el problema lo tenia en el if, ya ni lo puse.

Repito, muhas gracias por la ayuda.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Findfirst funciona cuando quiere rfernandez API de Windows 3 17-03-2005 11:35:43
Buscar archivos con FindFirst eulogi_SCG Varios 2 28-09-2004 15:27:38
FindFirst, FindNext, FindClose DJ VMan Varios 4 17-11-2003 01:36:53
hay algo as rapido ke findfirst y findnext? Alejo Varios 1 15-10-2003 21:34:05


La franja horaria es GMT +2. Ahora son las 21:15:54.


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