Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   idftp: Transfer Aborted Broken Pipe (https://www.delphipraxis.net/179853-idftp-transfer-aborted-broken-pipe.html)

gee21 6. Apr 2014 21:21

idftp: Transfer Aborted Broken Pipe
 
Hallo alle zusammen.

Ich versuche gerade eine Datei per IdFTP herunterzuladen. Damit die Progressbar auch den Fortschritt anzeigt, versuche ich die Dateigrösse auf dem Server mit: idftp.size herauszufinden.

Und eigentlich funktioniert es auch (also meistens) :) Aber merkwürdgerweise kommt bei einzelnen Dateien (immer bei den selben) folgende Meldung:

Transfer Aborted Broken Pipe



Wenn ich dann die zwei Zeilen rausnehme, also ohne Fortschrittanzeige, dann funktionierts bei allen Dateien:

Delphi-Quellcode:
BytesToTransfer:= IdFTP1.Size(Listbox1.Items[i]);
bytestotransfer:=bytestotransfer div 1024;
Weiss jemand wo das Problem entsteht und wie man es lösen kann? :)



Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;
  search: string;
begin

ListBox1.Clear;

idftp1.ChangeDir(listbox2.Items[listbox2.ItemIndex]);

    IdFTP1.List();
    for I := 0 to IdFtp1.DirectoryListing.Count - 1 do
    ListBox1.Items.Add(IdFtp1.DirectoryListing.Items[I].FileName);

search := '.';
if SendMessage(form1.ListBox1.Handle, lb_selectstring, - 1, Longint(PChar(search))) <> LB_ERR then listbox1.DeleteSelected;

search := '..';
if SendMessage(form1.ListBox1.Handle, lb_selectstring, - 1, Longint(PChar(search))) <> LB_ERR then listbox1.DeleteSelected;

    if listbox1.Items.Count>0 then begin
        for i := 0 to Listbox1.Items.Count - 1 do
        begin
        BytesToTransfer:= IdFTP1.Size(Listbox1.Items[i]);
        bytestotransfer:=bytestotransfer div 1024;

        IdFTP1.Get(Listbox1.Items[i], edit1.text+'\'+listbox1.Items[i], true);
        end;

    end else begin
        Showmessage('Leider kann diese Datei nicht heruntergeladen werden. Sorry');
        idftp1.ChangeDir('..');
        end;
idftp1.ChangeDir('..');

end;

gee21 7. Apr 2014 07:37

AW: idftp: Transfer Aborted Broken Pipe
 
Was ich noch herausgefunden habe:

Bei den Dateien, bei denen es nicht funktioniert, erhalte ich einen Minus Wert bei der .Size abfrage (zB: -1713788)

Es hat aber anscheinend keinen Zusammenhang mit der Dateigrösse. So kann ich zb eine 4,7GB Grosse Datei Problemlos abfragen und andererseits eine 2,5 GB grosse nicht (ergibt dann eben diesen Minus Wert)

dataspider 7. Apr 2014 08:22

AW: idftp: Transfer Aborted Broken Pipe
 
Zum Fehler kann ich nichts sagen.

Ich hole mir die Werte über die Ereignisse:

WorkBegin (AWorkCountMax)
Work (AWorkCount)

Vielleicht funktioniert das ja besser.

Frank

borstenei 7. Apr 2014 11:58

AW: idftp: Transfer Aborted Broken Pipe
 
http://www.delphipraxis.net/178825-t...ad-onwork.html

gee21 7. Apr 2014 12:37

AW: idftp: Transfer Aborted Broken Pipe
 
Also vieleicht kann ich einfach nicht richtig rechen, ich mache einen Denkfehler oder es ist ein Bug.


So gehts ja leider nicht immer (erhalte manchmal einfach Minuswerte :)

Delphi-Quellcode:
 BytesToTransfer:= IdFTP1.Size(Listbox1.Items[i]);
         bytestotransfer:=bytestotransfer div 1024 div 1024;
         IdFTP1.Get(Listbox1.Items[i], edit1.text+'\'+listbox1.Items[i], true);
Aber so geht es dann plötzlich!!??
Delphi-Quellcode:
        BytesToTransfer:= IdFTP1.Size(Listbox1.Items[i])div 1024 div 1024;
        ProgressBar1.Max := BytesToTransfer;
        IdFTP1.Get(Listbox1.Items[i], edit1.text+'\'+listbox1.Items[i], true);

Nun ja. Egal. Jetzt kann ich endlich weitermachen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz