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 );
}
{
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;
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:)