CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [BBC++6] Odwzorowanie plików na serwerze FTP

[BBC++6] Odwzorowanie plików na serwerze FTP

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

[BBC++6] Odwzorowanie plików na serwerze FTP

Nowy postprzez shimmo » sobota, 12 lutego 2011, 13:58

Witam ponownie.
Otóż chciałbym zrobić coś na kształt totalCommandera, w moim kliencie FTP, mianowicie, widoczne są dwa okna. W jednym odwzorowanie katalogu na dysku lokalnym (np. katalog w którym są nasze pliki projektu), a w drugim odwzorowanie plików na serwerze FTP.
Listowanie plików poprzez
KOD cpp:     UKRYJ  
IdFTP1->List(ListBox2->Items, "*.*", false);

jest łatwe, ale troche niefunkcjonalne, gdyż nie widać ikonek oraz katalogów. Dlatego chciałem zrobić to w taki sposób, jak niżej opisałem.

Dysponuje takim oto kodem do tego:
KOD cpp:     UKRYJ  
void __fastcall TForm1::LLoadFileBtnClick(TObject *Sender)
{
  TSearchRec sr;
  AnsiString fullName;
  AnsiString directory( ".\\" );
  AnsiString searchPath;

  TListItem  * item;
  int        imageIndex;
  Graphics::TIcon *ikona = new Graphics::TIcon();

  SHFILEINFO info;
  UINT sImg = SHGFI_ICON | SHGFI_SMALLICON | SHGFI_TYPENAME;


  searchPath = directory + "*.*";
  ListView1->Clear();
  if( FindFirst( searchPath.c_str() , faAnyFile, sr ) == 0 )
  {
    imageIndex = 0;
    do
    {
      if( sr.Name == "." || sr.Name == ".." )
        continue;

      fullName = directory + sr.Name;

      if( SHGetFileInfo( fullName.c_str(), 0, &info, sizeof( info ), sImg ) )
      {
        ikona->Handle = info.hIcon;
        ListView1->SmallImages->AddIcon( ikona );

        item = ListView1->Items->Add();
        item->Caption = sr.Name;
        item->ImageIndex = imageIndex++;
        item->SubItems->Add( AnsiString( info.szTypeName ) );
      }

    }
    while( FindNext( sr ) == 0 );
   }
   FindClose( sr );
}

Czyli po kliknięciu na Buttonie w oknie ListView1 pokazują mi się małe ikonki folderu bieżącego. To działa!

Moje pytanie brzmi, w jaki sposób zrobić by w oknie ListView2 po kliknięciu na odpowiednim Buttonie pojawiło się odwzorowanie plików umieszczonych w katalogu na serwerze? Zrobiłem więc taki sam ListView2 - z własnym Buttonem i zmiennymi poprzedzonymi literą "S" (np. Sdirectory)
Próbowałem użyć tego(umieściłem to podczas łączenia się do serwera)
KOD cpp:     UKRYJ  
bufor = IdFTP1->RetrieveCurrentDir();
    Sdirectory = bufor;
   

Jak na mój gust w tym momencie Sdirectory będzie zawierało ścieżkę bierzącego katalogu na serwerze.


KOD cpp:     UKRYJ  
SsearchPath = Sdirectory + "*.*";

Czyli według mojego rozumowania, zmienna SsearchPath powinna zawierać następujący ciąg znaków:
"/*.*"

Chyba dobrze, jednak wyszukiwanie plików na serwerze nie działa - robiłem analogicznie jak do wyszukiwania plików na dysku lokalnym.

Troszkę zamieszałem, ale byłbym wdzięczny jakby ktoś rzucił na to okiem, mam nadzieje, że wiadomo o co chodzi:)
Avatar użytkownika
shimmo
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): czwartek, 10 lutego 2011, 15:46
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Home
Kompilator: Borland Builder C++ 6
Gadu Gadu: 0
    Windows XPFirefox

Re: [BBC++6] Odwzorowanie plików na serwerze FTP

Nowy postprzez Cyfrowy Baron » sobota, 12 lutego 2011, 14:48

Do zmiany bieżącego katalogu używanego przez IdFTP musisz użyć funkcji ChangeDir. Tutaj nie da się niczego przechowywać w buforze, gdyż listą plików i folderów na serwerze zarządza komponent IdFTP i pobiera aktualną listę plików z katalogu zdalnego do którego jest aktualnie podłączony. Wszystko musi odbywać się na bieżąco.

Czytając Twoje posty odnoszę wrażenie iż sądzisz, że załatwisz to za pomocą prostego kodu, a tymczasem co widać po kodzie do powiązania plików z ikonami zadanie jest złożone, gdyż ten kod pokazuje, że najpierw trzeba wyliczyć pliki na folderze, wpisać je do listy ListView, potem trzeba sprawdzić jakiego rodzaju są to pliki, następnie sprawdzić w systemie jakie ikony przypisane są do tych plików, a następnie dodać te ikony do odpowiednich elementów listy.

Jak na mój gust w tym momencie Sdirectory będzie zawierało ścieżkę bierzącego katalogu na serwerze.


Zamiast zakładać, ze zmienna Sdirectory zawiera bieżącą ścieżkę powinieneś sprawdzić co tak naprawdę ta zmienna zawiera, no:

KOD cpp:     UKRYJ  
Sdirectory = IdFTP1->RetrieveCurrentDir();
ShowMessage(Sdirectory);


Przykład zmiany katalogu na koncie FTP o jeden katalog w górę:

KOD cpp:     UKRYJ  
IdFTP1->ChangeDirUp();
Sdirecotry = IdFTP1->RetrieveCurrentDir();
IdFTP1->List(NULL, "*.*", true);
ListBox1->Items = IdFTP1->ListResult; /* tutaj ListBox zamiast ListView */
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
    Windows XPFirefox

Re: [BBC++6] Odwzorowanie plików na serwerze FTP

Nowy postprzez shimmo » sobota, 12 lutego 2011, 15:25

Dzięki za odpowiedź :)
Cyfrowy Baron napisał(a):Czytając Twoje posty odnoszę wrażenie iż sądzisz, że załatwisz to za pomocą prostego kodu, a tymczasem co widać po kodzie do powiązania plików z ikonami zadanie jest złożone, gdyż ten kod pokazuje, że najpierw trzeba wyliczyć pliki na folderze, wpisać je do listy ListView, potem trzeba sprawdzić jakiego rodzaju są to pliki, następnie sprawdzić w systemie jakie ikony przypisane są do tych plików, a następnie dodać te ikony do odpowiednich elementów listy.


Po prostu z pomocą Twoich wpisów udało mi się zrobić nawet funkcjonalnego klienta FTP, jednak listowanie plików z serwera nie było dla mnie wystarczające, a jako, że dysponowałem kodem do odczytywania plików i ich ikon z katalogów, pomyślałem, że możnaby to w taki sam sposób zrealizować na serwerze. Ale jak widzę, nie do końca to się robi analogicznie, siedzę już nad tym dosyć sporo czasu i dalej nie bardzo wiem jak to zrealizować. Ale nie poddaję się póki co :D
Avatar użytkownika
shimmo
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): czwartek, 10 lutego 2011, 15:46
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Home
Kompilator: Borland Builder C++ 6
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przegląda forum

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