Italian community of Lazarus and Free Pascal
Programmazione => Generale => Topic aperto da: bonmario - Luglio 16, 2012, 08:31:20 am
-
Ciao a tutti,
sono alle prese col solito dilemma e volevo avere un'idea su come vi comportare pure voi.
Dovendo cercare dei files su Linux, voi di solito li cercate seguendo le regole di Linux o quelle di Windows?
Mi spiego meglo: supponiamo di avere su disco un file che si chiama "Pippo.MP3". Se su Windows faccio una ricerca usando FindFirs e FindNext di "*.mp3", troverei il mio file, su Linux no perché il mio file ha le lettere M e P maiuscole e la ricerca viene fatta con quelle minuscole.
Voi cosa fate in questi casi? Lasciate che vengano seguite le regole del sistema operativo oppure fate una ricerca con "*.*" e poi filtrate il risultato?
Ciao, Mario
-
Io scorro tutti i file di una data directory, faccio uppercase del nome compreso di estensione e poi confronto con uppercase del parametro di ricerca.
-
Grazie, penso che farò così anch'io. Mi sto guardando in giro per capire come fare nel momento in cui l'utente usa delle wildcard, come ad esempio "Vasco*.mp3".
Sai per caso se esiste già qualcosa?
Grazie, Mario
-
Non so se esiste qualcosa di già fatto al riguardo! :-[
-
Ciao,
come sapete non uso Linux, ma se non ricordo male, non esiste il find?
Se ricordo bene ha anche l'opzione per fare la ricerca case insensitive....
Ma in questo modo devi avere un sistema si ricerca per Windows e uno per Linux.
PS:
Hai già controllato che non esita una soluzione a questo problema nelle librerie di FPC?
In genere queste cose vengono wrappate e gestite ... poi potrebbe essere l'eccezione che conferma la regola ;)
-
Credo di aver trovato qualcosa. Stasera o domani provo a casa con Linux.
Bisogna aggiungere alle uses "Masks", poi si fa la ricerca con "GetAllFileMask". Per ogni file trovato, si fa la "ExtractFileName" ed il risultato lo si passa a "MatchesMask".
Su Windows funziona, ho solo un problema se, ad esempio, nel filtro è stato messo "*.*" e mi arriva un file che si chiama "pippo" (senza estensione). In questo caso il file verrebbe scartato. Per il resto sembra funzionere ...
Ciao, Mario
-
da quel che ne so io, FindFirst dovrebbe interfacciarsi con le "api" di sistema della partizione montata e, quindi, il case sensitive si/no dovrebbe dipende dal filesystem (se partizione windows = case insensitive, se partizione linux = case sensitive).
L'unico dubbio che mi viene è che facendo la scansione di tutti i file per poi filtrarli (a proposito, invece di "*.*" è meglio usare "*" sotto linux) potrebbe rallentare di molto l'applicazione se fatto su una cartella con qualche migliaia di files...
però non so se ci sono alternative...
comunque ho trovato questo, leggi qua
http://www.lazarus.freepascal.org/index.php/topic,11829.msg59704.html?PHPSESSID=fd3223c8441cfae2e648b6da2b3581d4#msg59704 (http://www.lazarus.freepascal.org/index.php/topic,11829.msg59704.html?PHPSESSID=fd3223c8441cfae2e648b6da2b3581d4#msg59704)
Edit:
Su Windows funziona, ho solo un problema se, ad esempio, nel filtro è stato messo "*.*" e mi arriva un file che si chiama "pippo" (senza estensione). In questo caso il file verrebbe scartato. Per il resto sembra funzionere ...
come detto sopra, prova con "*"
-
Grazie, ho appena provato la mia idea su Linux e sembra funzionare.
In effetti, non uso "*.*", ma "GetAllFileMask" che imposta "*" in Linux e "*.*" in Windows.
Ciao, Mario