Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Indy: IdFTP...par pitanja

[es] :: Pascal / Delphi / Kylix :: Indy: IdFTP...par pitanja

[ Pregleda: 3474 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

freespace
Filip Skorup
Donji Miholjac

Član broj: 31925
Poruke: 72
*.cmu.carnet.hr.

Sajt: filsko.100webspace.net


Profil

icon Indy: IdFTP...par pitanja24.10.2005. u 12:45 - pre 225 meseci
napravio sam neki ftp client koji se spaja na odredjeni FTP server. Client se spoji na server, prikaze listu podataka za skidanje.

E sad:
1. Uspio sam napraviti download sa servera ali ne znam kako da napravim da kad mi se nesto pocne skidati da pocne puniti progressbar koji ce sluziti kao "download progress" (da vidim koliko je trenutno skinuto), trazio sam preko googla ali nisam nista skuzio i to sto sam nasao nije radilo (koristi Evente: OnWork ; OnWorkBegin; OnWorkEnd;)

2. Ne mogu skidati cjeli folder nego samo neki fajl u folderu (*.exe,*.txt, itd.)
Kad pokusam skinuti cjeli folder i sve subfoldere prijavi gresku da takav direktorij ne postoji
Kako da skinem cjeli folder sa servera i sve njegove podfoldere.
 
Odgovor na temu

anon68680

Član broj: 68680
Poruke: 528
*.info-net.co.yu.



+14 Profil

icon Re: Indy: IdFTP...par pitanja24.10.2005. u 14:20 - pre 225 meseci
odredis velicinu filea na ftp serveru koristeci idftp1.Size(nazivfilea) i uneses tu vrednost u maxlength progres bara. Zatim odredis koliko je dosad skinuo odnosno odredis velicinu filea na disku(imam primer za to negde nacicu pa cu postovati ovde) i uradis progresbar1.progress:=filesizenahardu;
npr:
buttonclick;
idftp1.host:='nekitamohost';
idftp1.username:='username';
idftp1.password:='password';
IdFTP1.Get('Gimp-2.2pre1.tar.gz','C:\test.tar.gz',false);
ProgressBar1.Max:=IdFTP1.Size('Gimp-2.2pre1.tar.gz');
//
ovo dodas u onwork event:
while ProgressBar1.Max>myfilesize('Gimp-2.2pre1.tar.gz') do
ProgressBar1.Max:=myfilesize('Gimp-2.2pre1.tar.gz');
//i to je to
Sto se tice ovog drugog ne znam mozda bi trebao da probas sa '/putanja/*.*'...


[Ovu poruku je menjao krza dana 24.10.2005. u 16:09 GMT+1]
 
Odgovor na temu

anon68680

Član broj: 68680
Poruke: 528
*.info-net.co.yu.



+14 Profil

icon Re: Indy: IdFTP...par pitanja24.10.2005. u 14:25 - pre 225 meseci
function myFileSize(fName: string): int64;
var sr: TSearchRec;
begin
try
Result:=0;
FindFirst(fName, faAnyFile, sr);
Result:=sr.FindData.nFileSizeHigh*65535+sr.FindData.nFileSizeLow;
except
end;
end;

koristis ovo da bi odredio velicinu filea..
 
Odgovor na temu

freespace
Filip Skorup
Donji Miholjac

Član broj: 31925
Poruke: 72
*.cmu.carnet.hr.

Sajt: filsko.100webspace.net


Profil

icon Re: Indy: IdFTP...par pitanja24.10.2005. u 18:14 - pre 225 meseci
ovo mi je sve jasno, ali da na timer metnem da pokazuje velicinu fajla na disku u progressbar-u ili kako?
 
Odgovor na temu

marcha
Nikola Marcic
Beograd/Leskovac

Član broj: 6454
Poruke: 108
*.151.EUnet.yu.

ICQ: 156892888


+1 Profil

icon Re: Indy: IdFTP...par pitanja25.10.2005. u 01:05 - pre 225 meseci
1. Nemas potrebe da utvrdjujes velicinu skinutog fajla. Pre pocetka downloada procitas velicinu fajla na serveru i to postavis za Max u ProgressBaru , a u obradi dogadjaja OnWork menjas poziciju progressa koristeci parametar AWorkCount.

Code:

procedure DownloadFile(ARemoteFolder,ARemoteFileName, ALocalFileName:string);
begin
  if IdFTP1.Connected 
  then begin
            IdFTP1.TransferType := ftBinary;
            IdFTP1.ChangeDir(ARemoteFolder);
            ProgressBar1.Max := IdFTP1.Size(ARemoteFileName);
            IdFTP1.Get(ARemoteFileName, ALocalFileName, true);
          end 
  else Raise Exception.Create('Nije uspostavljena veza sa serverom');
end;

procedure IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
end;


2.
Da bi skinuo sve sto se nalazi u nekom folderu moras napraviti rekurzivnu porceduru koja ce za sadrzaj foldera skinuti sve datoteke iz nejga a onda udje u svaki podfolder pa pozove samu sebe za tekuci folder, pa ako i on ima sub foldere opet isto....

TidFtp ima property DirectoryListing koji ti vraca sadrzaj foldera u obliku TIdFTPListItems;
Svaki item iz rezultantne kolekcije/liste je TIdFTPListItem.
Kad uhvatis jedan item za njega mozes da saznas da li je direktorijum, datoteka ili symbol ("..",".").

Ne mogu da isprobam ovu proceduru ali mislim da bi tako nekako trebalo da bude, s tim da ces možda morati da za svaki poziv procedure dinamicki kreiras po jednu instancu IdFTP.

Code:

procedure GetFolderContent(ARemoteFolder:string);
var FolderName:string;
     RemoteItem:TIdFTPListItem;
     i:integer;
     LS:TStrings;
begin
  if IdFTP1.Connected then
  begin
    LS := TStringList.Create;
    try
      IdFTP1.ChangeDir(ARemoteFolder);
      IdFTP1.List(LS);
      for i:=0 to LS.Count-1 do
      begin
        RemoteItem:=IdFTP1.DirectoryListing[i];
        case RemoteItem.ItemType of
        ditDirectory: GetFolderContent(RemoteItem.FileName);
        ditFile:IdFTP1.Get(RemoteItem.FileName, RemoteItem.FileName, true);
        ditSymbolicLink://ne radi nista;
        end;
      end;
    finally
      LS.Free;
    end;
  end;
end;


Marcha
-----------------------------------
Pretpostavka je majka zajeba.
 
Odgovor na temu

ntojzan
Sandor II Tojzan
Becej

Član broj: 36657
Poruke: 168
62.108.111.*



Profil

icon Re: Indy: IdFTP...par pitanja26.10.2005. u 18:06 - pre 225 meseci
Imam i ja jedno malo pitanje vezano za istu temu.

Kako da obrisem -sve- u jednom folderu? (to ukljucuje i subfoldere sa svim fajlovima i to na vise nivoa, dakle bas sve)

Pokusao sam sa listingom, i par drugih metoda ali nijedan metod mi nije 100% dobar. Da li postoji neko jednostavno resenje?

Hvala.
 
Odgovor na temu

anon68680

Član broj: 68680
Poruke: 528
*.info-net.co.yu.



+14 Profil

icon Re: Indy: IdFTP...par pitanja26.10.2005. u 19:18 - pre 225 meseci
MISLIM da postoji nesto kao IdFTP1.directorylisting.delete(indexdira) ili tako neka funkcija...
 
Odgovor na temu

freespace
Filip Skorup
Donji Miholjac

Član broj: 31925
Poruke: 72
*.cmu.carnet.hr.

Sajt: filsko.100webspace.net


Profil

icon Re: Indy: IdFTP...par pitanja27.10.2005. u 19:41 - pre 225 meseci
hvala, uspio sam
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Indy: IdFTP...par pitanja

[ Pregleda: 3474 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.