Newsgroup: it.comp.lang.delphi
Titolo: FindFirst, FindNext

Ciao
Ho notato un comportamento "strano" delle funzioni FindFirst e FindNext.
Ho notato che tali funzioni, ritornano per le prime 2 o 3 voci file in
realtà non tali.
Mi spiego. Se visualizzo di volta in volta il nome dei file trovati dalle
funzioni, ho per i primi due o tre casi file inspiegabili tipo   '..'
oppure  '...'   e cose del genere. Ho provato a settare l'attributo di
ricerca ma qualunque esso sia, per le prime due o tre voci il risultato non
cambia. Questo avviene praticamente su qualunque cartella.
Ho ovviato alla cosa processando il risultato delle funzioni con un
fileexists(TSearchRec.name) e tutto è ok.
Volevo però capire se tutto ciò avesse un senso logico o mi sfugge qualcosa
(magari dipende dal OS?? Io ho Win XP Pro).
Grazie
Andrea

 funzioni, ho per i primi due o tre casi file inspiegabili tipo   '..'
[CUT]
Tutto normale. uegli item identificano la directory attuale, la directory
superiore, ecc.. Ad esempio quando in Dos dai il comando "cd .." il sistema
sposta la directory a quella superiore. Quei nomi di directory servono
apposta per muoversi fra i vari livelli.
"." Punta alla dir attuale.
".." Punta alla directory di livello superiore.
Ovviamente queste informazioni non le hai nella root. Ad esempio "c:\".
Ciao
Giuseppe


Quindi dovrei sempre testare ciň che mi ritorna per capire se effettivamente
č un file o meno?!
Io ho usato fileexists, ma ci sono altri approcci di lavoro con FindFirst e
FindNext?
Grazie mille
Andrea


Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)


Faccio una ricerca all'interno di una cartella predefinita nella quale
l'utente va  a mettere un num. n di foto che poi io devo andare a caricare
su un combo e a mostrare in sequenza. Dunque non posso utilizzare una
maschera, o perlomeno dovrei utilizzare piů cicli (bmp, jpg, jpeg, ico.....)
e si sa che troppi loop findnext rallentano molto...
Dunque utilizzo la maschera per tutti i file (*.*) e l'attributo faAnyFile.
L'inconveniente che avevo č che nel caso degli item '.' oppure '..' o
addirittura 'thumbs.db' che credo sia generato dal OS per la visualizzazione
anteprima di cartelle, avevo risultati non soddisfacienti. Ho dunque risolto
cosě:
  if findfirst(foto + '*.*',faAnyFile,sr) = 0  then begin
    if fileexists(foto + 
sr.name
) then
      combobox1.Items.Add(
sr.name
);
    while findnext(sr)=0 do
      if fileexists(foto + 
sr.name
) then
        combobox1.Items.Add(
sr.name
);
  end;
  findclose(sr);
Funziona bene ma volevo capire se ci fossero altre strade piů 'pulite'...
Poi ho notato che potrei settare l'attributo di ricerca  (faAnyFile -
faDirectory) , forse sarebbe la cosa migliore, anche se non ho testato.
Grazie mille per le delucidazioni
ciao Andrea


Faccio una ricerca all'interno di una cartella predefinita nella quale


 effettivamente č un file o meno?!
Io ho sempre usato if (sr.Name <> '.') and (sr.Name <> '..') then...
dato che questi due "file" li trova in tutte le cartelle tranne le root.
Se invece vuoi cercare solo determinati tipi di file, prova ad usare una
maschera, fatta cosě:
'*.jpg;*.bmp;*.gif......"
Poi fammi sapere se funziona perché non l'ho mai provata e adesso non ho
tempo...
--
Jax

 è un file o meno?!
quel risultato te lo da in quanto tu hai specificato che ti deve restituire
qualsiasi oggetto ...
quello che ti conviene è cambiare la maschera della ricerca, evitando di
inserire il flag relativo
alle directory (guarda msdn o relativa doc disponibile con la tua
distribuzione delphi)
antonio

 su un combo e a mostrare in sequenza.
Ciao,
Per cercare i soli files non ti serve specificare qualsiasi attributo.
Usa esclusivamente faArchive. Sono file inseriti dall'utente, non file di
sistema, né file nascosti, né label di volume, né tanto meno directory....
quindi usa solo l'attributo che ti interessa.
Oppure discrimini con un
If Search.Attr and faDirectory = 0 then
begin
...
end;
Quelle cartelle speciali (".", "..", credo ci sia anche quella a tre) Stanno
sempre in cima alla lista in quanto è il sistema stesso a crearle quando
viene creata la sottodirectory.
Puoi anche dare un paio di colpi di FindNext iniziali... ma è una soluzione
che non mi piace.
Ciao
Giuseppe

 rallentano molto...
Secondo me, potresti usare una maschera generica (*.*) per reperire
tutti i file in un solo ciclo di ricerca e controllare la loro
estensione utilizzando la funzione ExtractFileExt; attraverso tale
funzione, verifichi che l'estensione del file corrisponda all'elenco di
estensioni relative ai formati grafici che hai deciso di supportare
all'interno della tua applicazione.


 estensione utilizzando la funzione ExtractFileExt....
Già... non avevo pensato alla possibilità di controllare l'estensione.
Grazie


Ho risolto settando Search.Attr = (faAnyFile - faDirectory)
Ciao e grazie