Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Comportamiento extraño en StringList

Resulta que yo escaneo constantemente un directorio, para saber si hay algun subdirectorio nuevo, y si lo hay o no lo hay, lo cargo en un StringList (este lo creo al crearse la form y lo libero al cerrar la misma, sin problemas)
Utilizo la siguiente function:

Código Delphi [-]
function NumeroSubDirectorios(directorio: string;
   ocultos, sistema, soloLectura: boolean) : integer;
 var
   SR: TSearchRec;
   atributos: Cardinal;
 begin
   Lista.Clear;
   Result := 0;
   atributos := faDirectory;
   if ocultos then atributos := atributos or faHidden;
   if sistema then atributos := atributos or faSysFile;
   //if soloLectura then atributos := atributos or faReadOnly;
   directorio := IncludeTrailingPathDelimiter(directorio);
   if FindFirst(directorio +'*', atributos, SR) = 0 then
   begin
     repeat
       if (SR.Name <> '.') and (SR.Name <> '..')
         and DirectoryExists(directorio + SR.Name)
         then begin
              Lista.Add(SR.Name);
              Inc(Result);
         end;
     until FindNext(SR) <> 0;
     SysUtils.FindClose(SR);
   end;
 end;

Pero si bien, puedo mostrar el resultado de la funcion conrrectamente, ya que cuenta bien, no me pasa lo mismo con la Lista (TStringList), ya que no siempre me muestra el ultimo directorio que cuenta en:

Código Delphi [-]
Label1.Caption:=Lista.Strings[Lista.Count-1];

En ciertos casos me añade como ultimo elemento al anterior, es decir lo repite, y a veces no. Esto lo pruebo copiando directorios al directorio que estoy escanenando. Porque pasa esto????

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 19-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Es rarisimo, sigo sin poder solucionarlom y lo unico que necesito hacer es leer los nombres de los subdirectorios que contiene un determinado directorio (ni siquiera en foma recursiva) y de ahi obtener el nombre del ultimo de la lista.

Alguien conoce una mejor forma de hacerlo o alguna otra alternativa?

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #3  
Antiguo 19-06-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
esa lista no la tienes como variable ni como parámetro entonces debe ser una propiedad, lo más lógico de pensar es que hay algun otro método que accesa a ella y que está modificandola
__________________
self.free;
Responder Con Cita
  #4  
Antiguo 19-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Cita:
Empezado por droguerman
esa lista no la tienes como variable ni como parámetro entonces debe ser una propiedad, lo más lógico de pensar es que hay algun otro método que accesa a ella y que está modificandola
La tengo declarada como variable aca:

Código Delphi [-]
...
var
  Main: TMain;
  Lista: TStrings;
....

Sino, como tendria que hacerlo?
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #5  
Antiguo 19-06-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Tal vez sea problema de la rutina que lo rellena; Hay un truco en el ClubDelphi (no recuerdo cual exactamente) que rellena en un TStringList todos los ficheros de un directorio de forma recursiva.
Pruébala y así descartas esa parte de código (para detectar que no tenga errores).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 19-06-2007
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
Posibilidad que se me ocurre,

Si se estan creando continuamente directorios o archivos, parece normal que pueda pasar eso , por una simple problema de concurrencia, que se da siempre que varios procesos acceden a los mismos datos, sin realizacion de bloqueos.

Cuando se añade un subdirectorio o archivo nuevo al disco, la lista de archivos de ese directorio se modifica, ya que se tiene que insertar o añadir el nuevo archivo en la lista.

De modo que cuando el programa en delphi esta recorriendo la lista, en el medio de este proceso, esta es modificada, creciendo o disminuyendo o cambiando la lista de archivos de orden y de posicion.

En ese caso lo que habria que hacer es configurar el stringlist para que no admita duplicados:

Lista.Duplicates:= dupIgnore;

De este modo se evita que en el stringlist se añada dos veces el mismo archivo.

Aunque la forma buena de hacer lo que pretendes seria, usar las funciones del api que avisan cuadno hay modificaciones en una carpeta:
FindFirstChangeNotification
FindNextChangeNotification
ReadDirectoryChangesW
WaitForSingleObject
etc..

Saludos

Última edición por Mick fecha: 19-06-2007 a las 12:44:23.
Responder Con Cita
  #7  
Antiguo 19-06-2007
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Has probado el componente JvSearchFiles de la JVCL?
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #8  
Antiguo 19-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
SOLUCIONADO

Cita:
Empezado por Delfino
Has probado el componente JvSearchFiles de la JVCL?
Si Delfino, tenia la JVCL instalada y no habia notado este componente, es exelente!!! y lo solucioné con el. El problema del stringlist lo descarte, puesto a que la lista se modifica en otro procedure que no puedo evitar. Asi que lo hice con este componente y me ahorre dolores de cabeza.

Mil gracias a todos.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
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
Extraño comportamiento de Firebird 2.0 TrUnkS Firebird e Interbase 4 06-01-2007 23:05:57
Un comportamiento extraño en delphi... uper Varios 1 07-08-2004 00:44:14
Comportamiento extraño de Delphi walrus Varios 3 05-08-2004 10:04:32
Comportamiento extraño dataModule brandolin OOP 9 08-07-2004 14:25:47
Comportamiento extraño con InnoBD brandolin MySQL 0 20-10-2003 14:34:09


La franja horaria es GMT +2. Ahora son las 02:38:05.


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