Pobieranie całego katalogu

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

Pobieranie całego katalogu

Nowy postprzez Krzysiu555 » wtorek, 26 sierpnia 2008, 20:35

Otóż chciałbym się dowiedzieć czy da się pobrać cały katalog (nie znając nazw plików w nim zawartych) z serwera FTP przez komponent TIdFTP.
Sam trochę kombinowałem i szukałem ale nadal nie wiem czy się da i jak.
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    NieznanyNieznana

Re: Pobieranie całego katalogu

Nowy postprzez Cyfrowy Baron » Å›roda, 27 sierpnia 2008, 09:12

A próbowałeś ściągnąć cały katalog z zawartością.
► patrz serwis: Cyfrowy Baron dziaÅ‚: sieć - internet | Å›ciÄ…ganie i wysyÅ‚anie plików przez protokół FTP.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Pobieranie całego katalogu

Nowy postprzez Krzysiu555 » Å›roda, 27 sierpnia 2008, 12:31

tam jest opisane jak pobierać konkretne pliki - gdy znamy ich nazwę i lokalizację na serwerze

a mi chodzi żeby pobrać wszystkie pliki z jakiegoś katalogu gdy nie znam ich nazw ani ścieżek

teraz wymyśliłem że można by za pomocą funkcji list() wszystkie nazwy plików z danego katalogu wrzucić do jakiegoś listboxa, a potem pobierać kolejne linijki tego listboxa
...ale za bardzo to nie wiem jak to zrobić...=\
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    NieznanyNieznana

Re: Pobieranie całego katalogu

Nowy postprzez Darek_C++ » czwartek, 28 sierpnia 2008, 12:29

Skoro wiesz jak pobrać jeden plik i potrafisz wylistować zawartość katalogu to sprawa jest prosta :) Nie podam kodu, ale schemat:
- Umieszczasz nazwy plików z ścieżkami w jakimś komponencie umożliwiającym utworzenie listy. Ja bym to zrobił w ListView1 ze względu na możliwość tworzenia wielu kolumn;
- Następnie tworzysz nowe wątki, a w kodzie wątku wywołujesz metodę pobierającą plik. W ListView1 masz np. kolumnę "Status" gdzie możesz dać nawet dynamicznie tworzony procentowy stan pobierania pliku.
- Maksymalną ilość wątków ustawiasz np. na 10 i jeśli plików jest więcej czekasz z kolejnym wywołaniem wątku na zakończenie już działających. Sprawdzasz to w Timerze jeśli watek się skończy uruchamiasz następny, aż pobierzesz wszystkie pliki.

Wiem, ze ten opis wygląda "bardzo groźnie" ale w BCB mamy klasę public TThread po której będzie dziedziczyć Twoja klasa do obsługi wątków. Dzięki klasie TThread obsługa wątków jest stosunkowo prosta :) File -> New -> Other -> Thread Object i podajesz nazwę class name dla Twojej klasy. Jeśli masz niezbędne podstawy programowania w BCB/C++ i trochę pogooglasz to zrobisz to powiedzmy bez problemu ;).
Zobacz tutaj, ale w delphi IdFTP_i_IdFTPServer podstawowe procedury
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
PodziÄ™kowaÅ‚ : 66
OtrzymaÅ‚ podziÄ™kowaÅ„: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    NieznanyNieznana

Re: Pobieranie całego katalogu

Nowy postprzez Krzysiu555 » czwartek, 28 sierpnia 2008, 13:11

Dzięki za radę. Faktycznie brzmi to groźnie :o ale za to jest pewnie efektywne i bardziej profesjonalne.

Ja jako kompletny amator uporałem się z tym za pomocą pętli for:
Kod: Zaznacz cały
int licznik;
int ilewiad = ListBox1->Items->Capacity;
for (licznik=0;licznik<ilewiad;++licznik) {
  String odczytz = ListBox1->Items->Strings[licznik];
  String zapisdo = "users/" + ListBox1->Items->Strings[licznik].Delete(1,19);
  Form1->IdFTP1->Get(odczytz, zapisdo, true, false);
  Form1->IdFTP1->Delete(ListBox1->Items->Strings[licznik]);
}


Jak znajdę czas to z pewnością przeczytam ten link co podałeś i przerobię to na Twój sposób, ale na razie zostanie.

Dzięki
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    NieznanyNieznana

Re: Pobieranie całego katalogu

Nowy postprzez Darek_C++ » czwartek, 28 sierpnia 2008, 14:52

Taki sposób jest dobry jak masz na FTP małe pliki :) jak będą większe to porażka, bo bez wątków nawet nie ruszysz oknem programu.

Od biedy możesz swój kod uruchomić w jednym oddzielnym wątku. Pliki będą pobierane liniowo, ale przynajmniej z oknem będziesz mógł robić rożne akcje np. kliknąć w buton zakończ jak Ci się znudzi pobieranie...
Zobacz: Implementacja wielowątkowości opisana przez CB.

Możesz też dać w ciele pętli:
Kod: Zaznacz cały
Application->ProcessMessages();
co będzie "odświeżało" stan okna przy każdym jej przebiegu i umożliwi przesunięcie okna...
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
PodziÄ™kowaÅ‚ : 66
OtrzymaÅ‚ podziÄ™kowaÅ„: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    NieznanyNieznana

Re: Pobieranie całego katalogu

Nowy postprzez Krzysiu555 » czwartek, 28 sierpnia 2008, 18:12

na szczęście pliki na których będę operował to maks 3mb a najczęściej <1mb więc problemu chyba nie będzie - przynajmniej na razie działa, ale tak czy siak dzięki za informacje i rady
Avatar użytkownika
Krzysiu555
Intelektryk
Intelektryk
 
Posty: 161
Dołączył(a): sobota, 23 sierpnia 2008, 16:55
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows 7 Professional 64
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 0
    NieznanyNieznana


Powrót do Aplikacje sieciowe

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron