11. maj 2007 - 13:24Der er
17 kommentarer og 1 løsning
FTP - Kun filnavn
Hvordan får man en listbox til at vise indholdet af en FTP mappe jeg bruger denne kode: idFTP1.list (Filelistbox1.items.Create); men det giver noget i retning af: -rw-r--r-- 1 70835 70835 110 May 11 13:22 test.txt hvordan får jeg den til bare at skriv test.txt?
Er ikke helt sikker på hvad det du søger, men forstår det som en string parsing.
En simpel løsning (nem at følge)
var str:string; index:integer; lastSpace:Integer;
Først finder vi sidste space i din string str := '-rw-r--r-- 1 70835 70835 110 May 11 13:22 test.txt'; LastSpace := -1; for index := 1 to length(str) do if str[index] = ' ' then LastSpace := index;
Så hiver vi det ud vi skal bruge. Fra sidste space og resten af strengen.
if lastSpace <> -1 then begin showmessage( copy(str, lastspace, maxint) ); end;
den lister alle filerne som er i ftp mappen, men problemet er at istedet for at skrive test.txt får man -rw-r--r-- 1 70835 70835 110 May 11 13:22 test.txt
ja tror det virker, men problemet er at jeg ikke ved hvordan jeg får indholdet fra idftp1.list ind i stringen "str", får fejlen [DCC Error] Unit7.pas(51): E2010 Incompatible types: 'string' and 'procedure, untyped pointer or untyped parameter'
Jeg har skrevet om det før - med ligeså meget konkret lærdom ... Jeg er næsten 100% sikker på der findes en funktion i ftp-komponenten der kun lister filerne.
Skulle der ikke gøre det må du læse filerne ind i en stringlist (vha. assign) og dernæst slette tegnene 1..50
MyList.Assign(IdFTP.List)
for i := 0 to MyList.Count - 1 do MyList[i] := copy(MyList[i],50,MaxInt);
derefter har du dine filer - men som nævnt. Jeg er meget sikker på funktionen, du leder efter, er lavet og bare skal findes.
Den hedder vist: DirectoryListing og er nedarvet fra en TCollectionList. Dens anden halvdel er TIdFSPListItem (nedarver så fra TCollectionItem) og indeholder bl.a. en property der hedder "Filename". Mon ikke det er den du skal bruge?
ved MyList.Assign(IdFTP1.List); for jeg denne fejl [DCC Error] Unit7.pas(51): E2010 Incompatible types: 'TPersistent' and 'procedure, untyped pointer or untyped parameter'
Du kan sikkert bruge DirectoryListing sådan som jeg påstod - den er i alt fald bedre end list hvis du skal have nogle af detaljerne med på en ordnet måde, men Chads egen FAQ benytter selv List. Proceduren har en optionel parameter som styrer om det skal være detaljeret eller ej.
Gætter på følgende vil fungere:
var Files : TStringList; begin Files := TStringList.Create; try IdFTP.List(Files,'*.*',false); finally Files.Free; end; end;
Velkommen til eksperten.dk men først skal vi slå et par ting fast. Denne tråd er en måned gammel, der er ingen grund til at genoplive gamle tråde. Hvis du vil have svar på noget så skal du ( fremover ) oprette dit eget sprøgsmål ( gøres i bjælken foroven )
1. koden som hrc giver virker perfekt
2. Der er ikke noget BoundIP i denne kode.
3. Men siden du er ny her, kan jeg da godt prøve at hjælpe dig. Kan du give en forklaring på hvor fejlen kommer? er svært at svarer helt præcist med så få oplysninger. Det lyder til at din IdFTP ikke ved hvad den skal forbinde til. Prøv denne kode istedet...
var Files : TStringList; begin idFTP1.Host := 'din Host'; idFTP1.Username := 'Dit brugernavn'; idFTP1.Password := 'Dit password'; try idFTP1.Connect(); except on E:Exception do showmessage ('Der kunne ikke forbindes til serveren') ; end; Files := TStringList.Create; try IdFTP.List(Files,'*.*',false); finally Files.Free;
erstat host, brugernavn og password med det du har fået af din FTP udbyder
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.