|
|
Up |
|
|
  |
Date: Jul 16, 2008 23:22
Ciao a tutti,
supponiamo di dover fare una ricerca con FindFirst e FindNext di tutti i
files che hanno almeno una delle seguenti estensioni:
*.aaa
*.bbb
*.ccc
e che tale ricerca vada fatta su tutte le directories del disco. E'
possibile dire a FindFirst di cercare tutti i files che soddisfano almeno
una delle estensioni?
Ad oggi faccio una ricerca con *.* e poi verifico io che l'estensione ricada
tra una di quelle.
Grazie in anticipo, Mario
|
| |
|
| | 10 Comments |
|
  |
Author: JaxJax Date: Jul 16, 2008 23:44
MBulu ha scritto:
> Ad oggi faccio una ricerca con *.* e poi verifico io che l'estensione ricada
> tra una di quelle.
Anch'io me lo sono sempre chiesto, ma non ho mai approfondito.
Guardando i sorgenti, FindFirst si basa si una API (FindFirstFile), ed è
questa API che non prevede il passaggio di più estensioni.
Neanche la FindFirstFileEx lo prevede, quindi l'unica soluzione
alternativa, così sui due piedi, potrebbe essere farsi una procedura
generica a cui viene passata l'estensione, che verrà richiamata per ogni
estensione ricercata.
Bisognerebbe fare delle prove per vedere se e in quali condizioni questa
soluzione sia più veloce della ricerca *.*
--
Jax
|
| |
|
| | no comments |
|
  |
Date: Jul 17, 2008 00:00
Il 17 Lug 2008, 08:44, Jax ha scritto:
> Neanche la FindFirstFileEx lo prevede, quindi l'unica soluzione
> alternativa, così sui due piedi, potrebbe essere farsi una procedura
> generica a cui viene passata l'estensione, che verrà richiamata per ogni
> estensione ricercata.
> Bisognerebbe fare delle prove per vedere se e in quali condizioni questa
> soluzione sia più veloce della ricerca *.*
Ci avevo pensato anch'io, ma ho notato che se la ricerca viene fatta
partendo per esempio da C:\, alla fine conviene cercare *.* e poi fare un
filtro sulla lista dei risultati. Nel primo caso infatti in disco viene
letto una volta sola, nell'altro caso verrebbe riletto più volte in baso al
n° di estensioni da trovare e le operazioni fatte in memoria sono più veloci
di quelle fatte su disco.
Almeno questo nel mio programma in cui posso arrivare a cercare fino a 10
estensioni differenti.
Ciao e grazie ancora, Mario.
|
| |
| no comments |
|
  |
Author: ACSHACSH Date: Jul 17, 2008 03:33
MBulu ha scritto:
> Ci avevo pensato anch'io, ma ho notato che se la ricerca viene fatta
> partendo per esempio da C:, alla fine conviene cercare *.* e poi fare un
> filtro sulla lista dei risultati. Nel primo caso infatti in disco viene
> letto una volta sola, nell'altro caso verrebbe riletto più volte in baso al
> n° di estensioni da trovare e le operazioni fatte in memoria sono più veloci
> di quelle fatte su disco.
> Almeno questo nel mio programma in cui posso arrivare a cercare fino a 10
> estensioni differenti.
Se stai usando Lazarus, quindi programmando in un ottica multipiattaforma,
non devi dare per scontato questo fatto.
Ma, visto che parli di "estensione", direi che ti limiti a Windows, e
quindi tutto quello che avete detto è valido e corretto. In tal caso,
potresti dere un occhio alla funzione AdvBuildFileList nelle libreria
Jedi, che dovrebbe fare proprio quello di qui hai bisogno.
Ciao
ACSH
--
|
| Show full article (1.07Kb) |
| no comments |
|
  |
Date: Jul 17, 2008 23:22
Il 17 Lug 2008, 12:33, AWSDERTY@TURUR.XXE (ACSH) ha scritto:
> Se stai usando Lazarus, quindi programmando in un ottica multipiattaforma,
> non devi dare per scontato questo fatto.
> Ma, visto che parli di "estensione", direi che ti limiti a Windows, e
> quindi tutto quello che avete detto è valido e corretto. In tal caso,
> potresti dere un occhio alla funzione AdvBuildFileList nelle libreria
> Jedi, che dovrebbe fare proprio quello di qui hai bisogno.
In effetti lo faccio con Lazarus ed il programma è compilato anche in Linux.
Nel mio caso vado alla ricerca di files PDF e di OpenOffice (ODS, ODT, ecc)
in ogni caso ho previsto che l'utente possa inserire un filtro e, se vuole,
la ricerca viene fatta anche senza estensioni !!!
|
| Show full article (1.60Kb) |
| no comments |
|
  |
Author: MicrogesMicroges Date: Jul 17, 2008 23:34
Scusa ma usare un Thread?
|
| |
| no comments |
|
  |
Date: Jul 17, 2008 23:44
Il 18 Lug 2008, 08:34, Microges ha scritto:
> Scusa ma usare un Thread?
>
Non li ho mai usati !!!
In quel caso cosa cambia? L'applicativo non sembra ugualmente bloccato?
Ciao, Mario
|
| |
| no comments |
|
  |
Author: MicrogesMicroges Date: Jul 18, 2008 02:04
> Non li ho mai usati !!!
Be questo non e' un problema, in giro vi sono una miriade di esempi dai
piu' semplici ai piu' complessi
> In quel caso cosa cambia? L'applicativo non sembra ugualmente bloccato?
No. Un thread e' un processo parallelo al tuo. Un po' come se avvii due
programmi simultaneamente - se uno e' bloccato, l'altro non lo e' -
|
| |
| no comments |
|
  |
Author: Giorgio PadoanGiorgio Padoan Date: Jul 18, 2008 03:07
"MBulu" ha scritto nel messaggio
news:62Z108Z225Z151Y1216362253X12356@usenet.libero.it...
> Il 17 Lug 2008, 12:33, AWSDERTY@TURUR.XXE (ACSH) ha scritto:
>> Se stai usando Lazarus, quindi programmando in un ottica
>> multipiattaforma,
>> non devi dare per scontato questo fatto.
>> Ma, visto che parli di "estensione", direi che ti limiti a Windows, e
>> quindi tutto quello che avete detto è valido e corretto. In tal caso,
>> potresti dere un occhio alla funzione AdvBuildFileList nelle libreria
>> Jedi, che dovrebbe fare proprio quello di qui hai bisogno.
>
> In effetti lo faccio con Lazarus ed il programma è compilato anche in
> Linux.
> Nel mio caso vado alla ricerca di files PDF e di OpenOffice (ODS, ODT,
> ecc)
> in ogni caso ho previsto che l'utente possa inserire un filtro e, se
> vuole,
> la ricerca viene fatta anche senza estensioni !!!
>
> Mi attacco a questo thread per chiedere un consiglio: dovendo cercare i ...
|
| Show full article (1.90Kb) |
| no comments |
|
  |
|
|
  |
Author: Andrea LaforgiaAndrea Laforgia Date: Jul 18, 2008 11:23
On Fri, 18 Jul 2008 06:22:46 GMT, ci...@ciao.it (MBulu) wrote:
>Mi attacco a questo thread per chiedere un consiglio: dovendo cercare i
>files potenzialmente su tutto il disco, faccio una ricerca con i classici
>FindFirst, FindNext e FindClose in una procedura ricorsiva. Durante
>l'esecuzione, sorge il problema dell'applicativo che sembra in loop.
Crea un thread a cui fai eseguire tutta l'operazione di ricerca.
Thread che dovrà comunicare con la main form o chi di dovere mediante
messaggi (o tecnica equivalente) i risultati che trova di volta in
volta. Non è complicato farlo.
|
| |
| no comments |
|
|
|
|