PDA

Visualizza la versione completa : [delphi] File di una directory


DonFabio
04-04-2005, 11:48
Ciao a tutti,

ho bisogno di un ciclo che mi legga i nomi dei file in una determinata directory e li metta nel nome di una variabile, nello schema come segue:

ciclo
leggi nome file
setta nome variabile
//fai qualcosina
loop

Come faccio?

alka
04-04-2005, 12:26
Cerca sulla Guida in linea di Delphi gli argomenti relativi alle funzioni FindFirst, FindNext e FindClose: vi sono tutte le informazioni per utilizzare tali funzioni, nonchè alcuni esempi di codice.

Ciao! :ciauz:

DonFabio
04-04-2005, 15:28
pare che funzioni, invece no :dhò:

//si connette al server ftp
idftp1.Connect();
//se è connesso scrive fabio e disabilita button
if idftp1.Connected=True then
begin
path:='c:\fabio\';
button1.Caption := 'Connesso';
button1.Enabled := false;
button2.Visible := true;
//prepara tutto per l'ftp
idftp1.TransferType:=ftascii;
idftp1.ChangeDir('upload');
//scarica e cancella il file
FileAttrs := 0;
repeat
begin
findfirst(path, FileAttrs, sr);
idftp1.Put(sr.name, sr.name, false);
deletefile(path+sr.Name);
end;
until FindNext(sr) <> 0;
FindClose(sr);

non fa ne upload ne cancella il file...perché? :cry:
Dopo due anni che non tocco delphi mi pare di ricominciare daccapo. :cry:
Cosa sbaglio?

alka
04-04-2005, 15:34
Anche per la funzione FindFirst è necessario verificare il valore di ritorno poichè potrebbe fallire. Inoltre, se non ricordo male, è necessario specificare una maschera di ricerca per i file, oltre al percorso (ad esempio, "C:\MiaDir\*.*").

Basta posizionare un breakpoint sulla chiamata al metodo Put del componente TIdFTP per verificare, infine, che venga specificato il percorso completo del file e non solo il nome. Nella tua implementazione, a seconda dei casi, la chiamata fallisce comunque poichè per il file locale è necessario specificare l'intero percorso, mentre per il file remoto è necessario solamente il nome del file (o comunque il percorso relativo, che è senz'altro diverso dal percorso del file sul tuo PC).

Ciao! :ciauz:

DonFabio
04-04-2005, 15:44
Originariamente inviato da alka
Anche per la funzione FindFirst è necessario verificare il valore di ritorno poichè potrebbe fallire. Inoltre, se non ricordo male, è necessario specificare una maschera di ricerca per i file, oltre al percorso (ad esempio, "C:\MiaDir\*.*").

Basta posizionare un breakpoint sulla chiamata al metodo Put del componente TIdFTP per verificare, infine, che venga specificato il percorso completo del file e non solo il nome. Nella tua implementazione, a seconda dei casi, la chiamata fallisce comunque poichè per il file locale è necessario specificare l'intero percorso, mentre per il file remoto è necessario solamente il nome del file (o comunque il percorso relativo, che è senz'altro diverso dal percorso del file sul tuo PC).

Ciao! :ciauz: Il percorso si trova nella variabile path...
Come faccio a verificare il ritorno di FindFirst?
Ho provato ad aggiungere path+ nell'istruzione put di tidftp, ma nulla, da sempre errore. Non capisco cose sbaglio. :dottò:

In pratica questo programmino dovrebbe fare la scansione di una dir: quando trova file fa l'upload ftp, poi cancella i file caricati.
Intanto qui non va. :dhò:

alka
04-04-2005, 15:50
Originariamente inviato da DonFabio
Il percorso si trova nella variabile path...

In tal caso, va accodato al nome del file da inviare tramite FTP.


Originariamente inviato da DonFabio
Come faccio a verificare il ritorno di FindFirst?

Con un'istruzione if, ovviamente.


Originariamente inviato da DonFabio
Ho provato ad aggiungere path+ nell'istruzione put di tidftp, ma nulla, da sempre errore. Non capisco cose sbaglio. :dottò:

Non è sufficiente dire che "dà errore", poichè questo è ovvio: se tutto funzionasse correttamente, non avresti aperto questa discussione. Specifica l'errore che ottieni, altrimenti è necessario provare materialmente il tuo codice per ottenere lo stesso effetto...forse...

DonFabio
04-04-2005, 15:53
Mi dice Cannot open file da EFOpenError... :incupito:
Eppure sembra giusto.

alka
04-04-2005, 15:56
Originariamente inviato da DonFabio
Mi dice Cannot open file da EFOpenError... :incupito:
Eppure sembra giusto.
Usa gli strumenti di debugging che Delphi mette a disposizione per verificare quali sono i parametri che passi al metodo Put che esegue l'upload del file.

Poni un breakpoint sulla chiamata a Put e, attraverso la finestra "Evaluate", ispeziona i valori dei parametri e verifica che il percorso, i separatori del percorso, il nome del file e così via siano validi (poichè probabilmente, dato l'errore, non lo sono).

Ciao! :ciauz:

DonFabio
04-04-2005, 15:57
Comunque ho provato a stampare sr.name nella caption di un button, mi da vuoto...ergo sum, il problema è la scansione della dir...
Ed è proprio quello che non so fare... :dhò:

DonFabio
04-04-2005, 16:00
Funziona :D

Nel path dovevo indicare anche la wildcard *.* :fagiano:

Loading