Written by Maverich Dicembre 08, 2011, 11:43:00 am21956 ViewsRating: 0 (0 Rates)Print
queste note si riferiscono ai componenti Indy
utilizzare il package Indy dal pannello IndyClients Core utilizzare il componente TCP - sul form IdTCPClient1 dal pannello IndyClients Protocols (am) utilizzare il componente TIdFTP - sul form IdFTP1
in un Form inserite - controllo TTreeView e assegnate nell'ObjectInspector Name = TVFolder - controllo TListBox e assegnate nell'ObjectInspector Name = LbDirectory - sRootDirFTP: string;
//connessione al server procedure TForm1.ConnettiServerFTP; var sMesg: string; bEsito: Boolean; begin sMesg := 'Il Server FTP non risponde';
//Test Client su Server bEsito := False;
//questo per ALice.it , //se usate invece un server su Host inserire l'indirizzo del server es: 62.211.68.45
idTCPClient1.Host := 'ftp.webalice.it'; idTCPClient1.Port := 21; //porta per comuicare con il server FTP //un test per verificare se il servizio Host risponde try idTCPClient1.Connect;
//legge e visualizza Directory presenti nel server FTP procedure TForm1.DisplayFTP; var i, c : Integer; s : String; begin lbDirectory.Items.Clear; IdFTP1.List(lbDirectory.Items, '', false);
TvFolder.Items.Clear;
for c := 0 to lbDirectory.Items.Count -1 do begin s := lbDirectory.Items[c]; i := IdFTP1.Size(s); if i = -1 then TvFolder.Items.Add(nil, s); // Directory end; end;
il componente IdFTP ha degli eventi che possono essere utilizzati per avere un controllo sullo stato di avanzamento del file.
IdFTP1.OnWorK
FTPWork(ASender, AWorkMode, AWorkCount);
IdFTP1.WorkBegin - chiamata all'inizio del trasferimento
//iDimFile dovra' essere Int64 e non Int -> iDimFile: Int64; if AWorkMode = wmRead then AWorkCountMax := iDimFile; FTPWorkBegin(ASender, AWorkMode, AWorkCountMax);
IdFTP1.WorkEnd
FTPWorkEnd(ASender, AWorkMode);
per scaricare un file dal server usate la funzione Get IdFTP1.Get(s, SaveFile.FileName, True, IdFTP1.ResumeSupported);
procedure Tfrm_AccessoRemoto.act_DownloadExecute(Sender: TObject); var i : Integer; ext, s : String; b : boolean; begin i := lbDirectory.ItemIndex; if i <> -1 then begin s := lbDirectory.Items[i]; i := IdFTP1.Size(s); iDimFile := i; if i = -1 then CambioFTPDir(s) // Directory else begin // File ext := ExtractFileExt(s); SaveFile.Filter := ext + ' files|*' + ext + '|All Files|*.*'; SaveFile.FileName := s; if SaveFile.Execute then begin b := true; if FileExists(SaveFile.FileName) then if MessageDlg('File già presente : sovrascrivere ?', mtWarning, [mbYes,mbNo], 0) = mrYes then DeleteFile(SaveFile.FileName);
{if ASCIIText1.Checked then FTP.TransferType := ftASCII else} IdFTP1.TransferType := ftBinary;
if b then IdFTP1.Get(s, SaveFile.FileName, True, IdFTP1.ResumeSupported); end; end; end else MessageDlg('Il file da scaricare non è stato selzionato', mtWarning, [mbOK], 0); end;
per Inviare al Server usate la funzione Put IdFTP1.Put(OpenFile.FileName, ExtractFileName(OpenFile.FileName));
[/code] procedure Tfrm_AccessoRemoto.act_UploadExecute(Sender: TObject); begin //utilizzata la unit Dialogs per scgliere il file if OpenFile.Execute then begin IdFTP1.TransferType := ftBinary; IdFTP1.Put(OpenFile.FileName, ExtractFileName(OpenFile.FileName)); DisplayFTP; end; end; [/code]
per cambiare Directory , attivate nel TVFolder (TTreeView), l'evento OnDblClick, in modo da poter cambiare.
//evento doppio click sul TTreeView (TVFolder) procedure Tfrm_AccessoRemoto.TvFolderDblClick(Sender: TObject); var i : Integer; s : String; begin inherited;
if Assigned(TvFolder.Selected) then lbDirectory.ItemIndex := lbDirectory.Items.IndexOf(TvFolder.Selected.Text); else lbDirectory.ItemIndex := -1;
i := lbDirectory.ItemIndex; if i <> -1 then begin s := lbDirectory.Items[i]; i := IdFTP1.Size(s); if i = -1 then CambioFTPDir(s); // Directory end; end;
//cambia Direcory e visualizza contenuti procedure Tfrm_AccessoRemoto.CambioFTPDir(NewDir: String); begin FLastDirStack.Add(IdFTP1.RetrieveCurrentDir); IdFTP1.ChangeDir(NewDir); //cambio directory DisplayFTP; //visualizza end;
da un qualunque livello per tornare alla radice utilizzare la variabile sRootDirFTP memorizzata al momento della connessione conviene utilizzare la variabile anziche' ChangeDir('\') , non sapendo a priori quale Directory il server utilizzera' come Root
procedure Tfrm_AccessoRemoto.RootDir; begin IdFTP1.ChangeDir(sRootDirFTP); DisplayFTP; end;
About the author
Maverich registered at Italian community of Lazarus and Free Pascal on Novembre 20, 2011, 10:21:54 pm and has posted 134 posts in the boards since then. Last visit was Novembre 20, 2016, 08:23:41 pm.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.