FTP Dateidownloads- Status anzeigen?



  • Hallo,

    ich möchte über die Komponente IdFTP1 den Downloadfortschritt in einer Progressbar anzeigen lassen. Kann mir da jemand helfen, wie ich das anstelle?

    Grüße

    Roman



  • shaftie schrieb:

    Kann mir da jemand helfen, wie ich das anstelle?

    Ja, die Suchfunktion des Forums. Z.B.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-113623-and-highlight-is-ftp+status.html



  • Hallo,

    ok, ich werde diese in Zukunft mehr bemühen.

    Leider funktioniert das ganze immernoch nicht bei mir 😕

    void __fastcall Tf2::IdFTP1Work(TObject *Sender, TWorkMode AWorkMode,
          const int AWorkCount)
    {
    Application->ProcessMessages();
    spb1->Position = AWorkCount;
    l2->Caption = AWorkCount;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall Tf2::IdFTP1WorkBegin(TObject *Sender, TWorkMode AWorkMode,
          const int AWorkCountMax)
    {
    
    Application->ProcessMessages();
    spb1->Max = AWorkCountMax;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall Tf2::IdFTP1WorkEnd(TObject *Sender, TWorkMode AWorkMode)
    {
    spb1->Position = 0;
    
    spb1->Max = 100; //  <---eigentlich umsonst
    
    Application->ProcessMessages();
    }
    


  • Hallo

    Leider funktioniert das ganze immernoch nicht bei mir

    Das ist keine ausreichende Fehlerbeschreibung.
    Ich würde erstmal die ProcessMessages()-Anweisungen nach die jeweiligen Änderungen setzen. Desweiteren benutzt den Debugger.

    /Edit : Und siehe Jansens Post in dem Link.

    bis bald
    akari



  • Hi,

    also, ich habe die ProcessMessages()- Anweisungen dahinter geschrieben, aber es funktioniert immernoch nicht.

    Das Label (l2) zeigt alles wunderbar an, die suiProgressBar (spb1) tut allerdings garnichts... Da bewegt sich nichts.

    Wenn ich

    void __fastcall Tf2::IdFTP1WorkBegin(TObject *Sender, TWorkMode AWorkMode,
          const int AWorkCountMax)
    {
    spb1->Max = AWorkCountMax;
    Application->ProcessMessages();
    }
    

    auskommentiere, dann regt sich die Progressbar, aber sie ist sofort auf 100%, was ja auch nicht Sinn der Sache ist.



  • Ich habe es nun so probiert:

    void __fastcall Tf2::IdFTP1Work(TObject *Sender, TWorkMode AWorkMode,
          const int AWorkCount)
    {
    spb1->Position = AWorkCount;
    Application->ProcessMessages();
    }
    //---------------------------------------------------------------------------
    void __fastcall Tf2::IdFTP1WorkBegin(TObject *Sender,
          TWorkMode AWorkMode, const int AWorkCountMax)
    {
    if (AWorkCountMax > 0)
    {
            spb1->Max=AWorkCountMax;
    }else
    {
            long dlsize=IdFTP1->Size("nbrowse.rar");
            spb1->Max = IdFTP1->Size(dlsize);
    }
    Application->ProcessMessages();
    }
    

    Leider bewegt sich das alles immernoch nicht...
    Ich glaube, dass Size("Dateiname") nichts zurückbringt, denn ich wollte es mal per label ausgeben und es kam nichts...

    Ich bin in das Verzeichnis /files gewechselt, da gab es eine Datei mit dem Namen "nbrowse.rar".
    Habe dann l2->Caption = IdFTP->Size("nbrowse.rar"); ausprobiert, aber das klappte nicht wirklich (keine Anzeige, Label blieb leer).

    Kann mir da noch jemand helfen?



  • //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      IdFTP1->Host = "ftp.heise.de";
      IdFTP1->User = "anonymous";
      IdFTP1->Password = "guest";
      IdFTP1->Connect();
      if (IdFTP1->Connected())
      {
        IdFTP1->ChangeDir("/pub/ct/pci/") ;
        ProgressBar1->Max = IdFTP1->Size("amd_201.zip");
        IdFTP1->Get("amd_201.zip", "c:\\amd_201.zip", true);
        IdFTP1->Disconnect();
      }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::IdFTP1WorkBegin(TObject *Sender,
          TWorkMode AWorkMode, const int AWorkCountMax)
    {
      ProgressBar1->Position = 0;
      Application->ProcessMessages();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::IdFTP1Work(TObject *Sender, TWorkMode AWorkMode,
          const int AWorkCount)
    {
      ProgressBar1->Position = AWorkCount;
      Application->ProcessMessages();
    }
    //---------------------------------------------------------------------------
    


  • Klasse, das funktioniert!

    Vielen Dank 🙂


Anmelden zum Antworten