Witam. Pisze serwerek w BDS_2006 korzystając z Indy 9. Jedna zmienna a raczej stała przyjmuje złe wartości.
Chodzi o stałą APath która to przy każdym wchodzeniu w katalog powinna zawierać <ort>scierzkę </ort>do tego katalogu. Jak się okazuje
to ta zmienna zawiera tą <ort>scierzkę </ort>do danego katalogu ale też zawiera wszystkie poprzednie ort!.
wygląda to mniej więcej tak:
najstarszy_pathstary_pathmłody_path//aktualny_path
I tak w APath występuje kilka razy ten sam folder.
Tak więc path wydłuża się z każdym przejściem do innego katalogu nawet jeśli przemieszczam się wstecz. Po kilku przechodzeniach po katalogach gdy wracam do katalogu roota to APath jest już bardzo długi.
W delphi7 z indy 9 jest identycznie ale już indy10 <ort>NIE MA </ort>tego problemu.
Czy można jakoś zerować tą zmienną.

//---------------------------------------------------------------------------

void __fastcall TForm1::IdFTPServer1ListDirectory(TIdFTPServerThread *ASender,
const AnsiString APath, TIdFTPListItems *ADirectoryListing)
{
TIdFTPListItem *LFTPItem;
TSearchRec SR;
int SRI;
String LTmpPath;
AnsiString pom_APath = APath;
pom_APath = ZamianaZnakow(APath); zamieniam te ukosniki

Memo1->Lines->Add(pom_APath);   //tutaj patrzę na zawartość
pom_APath = obcinaj(pom_APath); //tutaj wywalam ten path poprzedni - zostawiam poprawny
Memo2->Lines->Add(pom_APath);   //tutaj widzę że path jest już poprawny

LTmpPath = ZamianaZnakow(AppDir + ASender->HomeDir + pom_APath);
if (DirectoryExists(LTmpPath))
	LTmpPath = LTmpPath + "\\*.*";
else
	LTmpPath = LTmpPath + "*.*";

SRI = FindFirst(LTmpPath,faAnyFile,SR);
while( SRI==0 )
{
	LFTPItem = ADirectoryListing->Add();
	LFTPItem->FileName = SR.Name;
	if (SR.Attr && faDirectory)
	{
		LFTPItem->ItemType = ditDirectory;
	}
	SRI = FindNext(SR);
}
FindClose(SR);

}
//---------------------------------------------------------------------------
a tu obcinam złą zawartość:
//---------------------------------------------------------------------------
String TForm1::obcinaj(String path)
{
char *ch = path.c_str();
int len = path.Length();
int index = 0;
for(int i = len; i>=0; i--)
{ //jak znajdę podwójny ukosnik to znak że zaczyna się stary path
if (ch[i]=='\' && ch[i-1]=='\')
{
index = i;
break;
}
}
path = path.Delete(1,index); // ucinam zbędne rzeczy
return path;
}

Wiem że to C++ jednak w delphi kod wygląda niemal że identycznie, a <ort>poza tym </ort>w Builderze6 są jeszcze większe problemy
z indy9