Newsgroup: it.comp.lang.delphi
Titolo: ExtractFilePath

Ciao gente,
non sono solito a rompere per delle stupidate, ma questa è una di quelle da
cui non cavo un ragno dal buco (sarà l'età...)
Come faccio a restituire una stringa contenente "l'indirizzo su c:\" di un
determinato file?
es: poniamo che il file "pippo.txt" si trova è nell'indirizzo:
c:\documenti\testi\varie - come ottengo la stringa
'c:\documenti\testi\varie' ?
Ho provato con ExtractFilePath ma nulla di fatto.
Grazie a chi vorrà darmi una mano
PapaFoxtrot

 Ho provato con ExtractFilePath ma nulla di fatto.
infatti la funzione è quella, che risultato ti dà invece?
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

 Ho provato con ExtractFilePath ma nulla di fatto.
Io la uso spesso e funziona perfettamente. Che problemi ti da? Hai qualche
esempio?
-- 
Lis
Mercatino: 
http://snurl.com/sito_lis
Aiuta la ricerca contro il cancro: 
http://snurl.com/ida_team

 Mauro Falzari
Mauro, grazie per la tua attenzione.
io ho sempre usato ExtractFilePath(Application.ExeName) quindi se dichiaro
per esempio:
var s: string;
s := ExtractFilePath(Application.ExeName);
la variabile "s" contiene esattamente il percorso su disco dell'eseguibile.
La stessa cosa vorrei realizzarla per un file che non si trova nella Dir
dell'eseguibile.
se scrivo:
s := ExtractFilePath('pippo.txt');
ovviamente s non mi restituisce nulla

 ovviamente s non mi restituisce nulla
Ma è ovvio perchè la stringa 'pippo.txt' non contiene nessun path. La
funzione ExtractFilePath non va a ricercarsi il file ma fa semplicemente
delle operazioni sulla stringa che gli viene data.
Infatti, se provi a guardare il valore di Application.ExeName vedrai che
contiene anche il path, ed è per quello che funziona.
Se invece devi cercare un file su disco, dai un occhio alle funzioni
FindFirst/FindNext


 s := ExtractFilePath('pippo.txt');
per i percorsi relativi devi usare la ExpandFileName (o la più completa 
ExpandFileNameCase)


 ovviamente s non mi restituisce nulla
ovviamente diamo per scontato che
 ExtractFilePath('c:\documenti\testi\varie\pippo.txt') 
restituisca correttamente 'c:\documenti\testi\varie'
...o no? :-)


 ...o no? :-)
Ora cerco di spiegarmi facendo il mio esempio:
A seconda del tipo d'installazione del programma, esso può essere installato
in directory differenti che l'utente sceglie a suo piacimento. Le tabelle
possono essere quindi nel percorso che restituisce
ExtractFilePath(Application.ExeName) oppure nel percorso che restituisce
ExtractFilePath(Application.ExeName) + 'Archivi'.
In sede di progettazione questo non lo so, non so se il file "pippo.txt" si
trova nel percorso dell'eseguibile oppure in una sottodirectory rispetto
all'eseguibile quindi devo trovare una soluzione che mi restituisca la
stringa col percorso che restituisce ExtractFilePath(Application.ExeName)
oppure ExtractFilePath(Application.ExeName)+'Archivi'
Sperando di non abusare della Vs. pazienza
Grazie
PapaFoxtrot

 rispetto all'eseguibile 
in altre parole hai bisogno di eseguire una ricerca su tutti i file presenti 
nella cartella corrente e in tutte le sottocartelle (di cui non conosci i 
nomi a priori), per verificare se esista un file di nome XYZ.
Puoi usare la classe TMfTreeExplorer che ho rilasciato qui
http://digilander.libero.it/mauro.falzari/delphi/ricorsione.htm
che fa esattamente questo.
La crei, imposti un Path, assegni un evento a OnScanComplete, la avvii con 
Scan e nell'OnScanComplete scorri FileList con ExtractFileName alla ricerca 
del file XYZ


 PapaFoxtrot
-- 
Ciao, Anto', [37, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Di sempre cio' che senti e fai cio' che pensi."
    G.G. Màrquez

grazie per le vostre risposte,
non che sia una soluzione che mi piaccia, ma ho preferito semplificare (o
meglio banalizzare) le cose.
Il percorso sul c:\ può essere solo quello restituito da
ExtractFilePath(Application.ExeName) oppure
ExtractFilePath(Application.ExeName)+'\archivi' quindi uso la funzione
FileExists sul pimo percorso altrimenti prendo per buono il secondo.
E' un po' casereccio, ma in questo caso va bene perchè le alternative sonoo
solo 2.
Il problema si pone quando non sai assolutamente in quale parte del disco
sia un file.
Ora provo il suggerimento di Mauro "TMfTreeExplorer".
Grazie e ciao
PapaFoxtrot

 Ora provo il suggerimento di Mauro "TMfTreeExplorer".
ho appena aggiornato la classe in un componente, piů immediato da utilizzare:
http://digilander.libero.it/mauro.falzari/delphi/ricorsione.htm
Piů avanti ho intenzione di implementare anche la ricerca con filtri 
(wildcards) ma per ora non ho tempo.


 solo 2.
Se il tuo file puň essere solo in questi 2 percorsi e cosě risolvi il tuo
problema allora non preoccuparti, č una soluzione semplice, efficace e che
non porta via molto tempo come invece farebbe una ricerca completa



Ciao Lis,
ammetto perň che non sarebbe male creare una funzione che ti restituisca
l'indirizzario di un qualsiasi file all'interno dell'HD.
Ora non ho molto tempo, ma appena possibile mi cimenterň in questa ardua
(per me) impresa.
Ciao e grazie ancora
PapaFoxtrot

 (per me) impresa.
Queste funzioni di ricerca ci sono già (cerca su google FindFirst e
FindNext) però essendo molto impegnative (a livello di tempo) non è sempre
il caso di di utilizzarle.
Nel tuo caso per esempio non ha senso far sprecare all'utente N minuti per
ricercare un file quando da programma sai benissimo che ci sono solo 2
directory in cui può trovarsi il file che cerchi.


 l'indirizzario di un qualsiasi file all'interno dell'HD.
Windows LongHorn lo farà per te :-)
