el código como muchos sabrán es:
procedure TForm1.Button1Click(Sender: TObject); procedure ChangeAttributes(const path:String); var search : TSearchRec; nFiles : integer; cPath : String; begin application.ProcessMessages; // ESTE HACE QUE NO SE CUELGUE EL PROGRAMITA... JEEEEE cpath:=path {GetCurrentDir+'\';}; //cpath:=letra+'\'; nfiles:=findfirst(cpath + '*.*', faanyfile, search); while nfiles = 0 do begin if search.Attr = fadirectory then begin if (search.Name<>'.') and (search.Name<>'..') then begin setfileattributes(Pchar(cpath+search.Name), FILE_ATTRIBUTE_NORMAL); ChangeAttributes(path + search.Name + '\'); //memo1.Lines.Add(cPath+search.Name); end; end else begin SetFileAttributes(PChar(cPath + search.Name),FILE_ATTRIBUTE_NORMAL); ChangeAttributes(path + search.Name + '\'); memo1.Lines.Add(cPath+search.Name); end; nFiles:=FindNext(Search); end; SysUtils.FindClose(search); end; begin ChangeAttributes(GetCurrentDir+'\'); // esta es su llamada end;
Debo aclarar que el código trabaja bien casi todo el tiempo, pero por momentos como que se vuelve loco y no para de dar vueltas y vueltas de forma infinita....
Ahora para poder ver lo que está procesando he colocado un "tmemo" para poder registrar todo lo que se procesa (archivos y carpetas) y me he dado con la sorpresa que en los momentos que se vuelve loco sale esto en el memo:
Ejemplo:
D:\trabajos\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\
lo cual me deja más intrigado....
He probado varias veces buscando la causa y una pista que pude encontrar es que este problema también ocurre cuando un archivo o carpeta esta "comprimida para ahorrar espacio" el cual es una característica de windows para NTFS...
Agradezco a cualquiera que me de una mano y saber si a alguien más le ha pasado esto, también les adjunto un ejemplo con el error presente.
PD: la carpeta con el error se llama "prueba" y tienen que "comprimirlo para ahorrar espacio" ahí
verán el error.