[Delphi] NMFTP-probleem

Pagina: 1
Acties:

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 16:29
Ik heb een applicatie waarin gebruik wordt gemaakt van het NMFTP-component.
In deze app heb ik een stukje code zitten om de directorylisting in een ListBox te plaatsen:
code:
1
2
3
4
5
6
7
8
9
NMFTP1.ParseList := true;
NMFTP1.Connect();
NMFTP1.ChangeDir('\');
NMFTP1.List();
for i:=0 to NMFTP1.FTPDirectoryList.name.Count - 1 do
begin
  listBox1.Items.Add(NMFTP1.FTPDirectoryList.name[i]);
end;
NMFTP1.Disconnect();

Probleem is nu dat die ListBox leeg blijft !
Ik weet 100% zeker dat die directory op de server niet leeg is.
Als ik in de event-handler van het OnListItem-event iets zet als "istBox1.Items.Add(Listing);" krijg ik wel de volledige listing te zien (alleen niet geparsed).

Ligt dit aan het NMFTP-component of maak ik ergens een fout ?

Verwijderd

Weet je zeker dat de voorwaarde van de for-loop goed is. M.a.w. kom je uberhaupt wel in de loop?

Indien je zeker weet dat je in de loop komt, weet je dan zeker dat je inderdaad iets aan de ListBox toevoegd? Of zou het kunnen dat je lege strings toevoegd?

Het gebruik van de ListBox is m.i. nl. wel goed

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 16:29
Die loop is gewoon goed.
Ook als ik er een breakpoint zet en de waarde van 'NMFTP1.FTPDirectoryList.name.Count' opvraag, dan geeft ie 0.
Het lijkt gewoon alsof ie die gegevens niet in die FTPDirectoryList zet.

Verwijderd

Op dinsdag 19 februari 2002 18:29 schreef maikel het volgende:
Die loop is gewoon goed.
Ook als ik er een breakpoint zet en de waarde van 'NMFTP1.FTPDirectoryList.name.Count' opvraag, dan geeft ie 0.
Dan zit daar dus het probleem. Een for-loop met als startwaarde 0 en als stopwaarde 0 wordt namelijk niet doorlopen.

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 16:29
Het probleem zit dus daarvoor: want hij hoort geen 0 te zijn!

Ik heb sterk het idee dat er in die NMFTP-component een fout zit waardoor hij die FTPDirectoryList niet vult of zo.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 16:08

Delphi32

Heading for the gates of Eden

Op dinsdag 19 februari 2002 22:13 schreef maikel het volgende:
Het probleem zit dus daarvoor: want hij hoort geen 0 te zijn!

Ik heb sterk het idee dat er in die NMFTP-component een fout zit waardoor hij die FTPDirectoryList niet vult of zo.
Volgens mij heet dat 'a-synchroon' werken... het commando List wordt naar de FTP server gestuurd, en je component raiset het event OnListItem zodra ie meer info heeft over de de ListItems die de FTP server terug stuurt. Je KUNT dus niet direct na List een for-loop gebruiken, je moet wachten op de OnListItem events, of wachten tot die allemaal afgelopen zijn. Tot die tijd levert FTPDirectoryList.Count 0 op.

edit:

Ik wil bepaald NIET beweren dat de NetMaster components bugfree zijn, maar wat je als bug beschouwd is echt geen bug...

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 16:29
Ah, ok.

Ik heb nu een eventhandler voor de OnSuccess-event gemaakt:
code:
1
2
3
4
5
6
7
if (Trans_Type = cmdList) then
begin
  for i:=0 to NMFTP1.FTPDirectoryList.name.Count - 1 do
  begin
    ListBox1.Items.Add(NMFTP1.FTPDirectoryList.name[i]);
  end;
end;

Maar ook dan is de waarde van Count nog steeds 0. :?

Hij blijft trouwens ook af en toe hangen in de List-functie.
Dan gaat m'n programma gewoon niet verder. En als ik dan nog een keer op de button klik, krijg ik een melding:
a list-command is already being processed.

Verwijderd

Vond dit in de helpfile:

<b>The TFTPDirectoryList object is the base class for all of the other FTP Directory List parsing objects. If you encounter an FTP host that does not comply with any of the predefined list objects currently available, you can use this class to derive your own list parser.</b>

Het zou dus kunnen dat je op een server zit waarvan hij de list niet kan weergeven. Je zou misschien kunnen kijken wat hij in de list functie doet en eventueel een afgeleide van TFtpDirectoryList kunnen maken die wel goed werkt.

Staat de vendor op auto, probeer hem dan ook een op de overeenstemmende met de server te zetten. Staat hij niet op auto probeer dat dan ook nog even.

Succes.

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 16:29
Dat stukje had ik inderdaad ook al gelezen.
Maar zelf parsen is niet zo simpel.

Maar ik gebruik nu de Indy-componenten.
Nu werkt het wel.
Pagina: 1