Seite 3 von 3

Verfasst: 03.02.2007 17:47
von ts-soft
Programie hat geschrieben:Erstmal: DANKE für die Antworten! :allright:
Vernommen, gern geschehen. Wir werden diesen Thread aber wohl trotzdem
noch weiterführen, auch wenn Du inzwischen alle Infos hast :wink:

Verfasst: 03.02.2007 20:37
von al90
Eine kleine Anmerkung: Ein CallBack ist nicht immer zwingend nötig
wenn man Scrittweise Up/Downloaden möchte. Hier mal ein auszug
aus meinem Code:

Code: Alles auswählen

Procedure.l UploadFileFTP(hConnect, File$, dest$, ProgressID.l, BreakID.l)

#FTP_TRANSFER_TYPE_UNKNOWN = 0
Bytes.l = 0
BlockSize.l=256
x.q=FileSize(File$)
blocks.l=x/BlockSize : rest.l=x-(blocks*BlockSize)
dest$=ReplaceString(dest$,"\","/")
mem.l=AllocateMemory(512)

If mem=#False
  ProcedureReturn 0
EndIf

; Schrittweise Uploaden

hFile.l = FtpOpenFile_(hConnect, @dest$, #GENERIC_WRITE, #FTP_TRANSFER_TYPE_UNKNOWN, 0)

If hFile <> #Null
  If ReadFile(0,File$)
    SetGadgetAttribute(ProgressID,#PB_ProgressBar_Maximum,blocks)
    If blocks>0
      For i=1 To blocks
        SetGadgetState(ProgressID,i)
        Event=WindowEvent()
        If Event=#PB_Event_Gadget
          If EventGadget()=BreakID
            rest=0
            Break
          EndIf
        EndIf
        ReadData(0, mem, BlockSize)
        y.l=InternetWriteFile_(hFile, mem, BlockSize, @Bytes)
        If y=#False : rest=0 : Break : EndIf
      Next
    EndIf
    If rest>0
      SetGadgetState(ProgressID,blocks)
      ReadData(0, mem, rest)
      y.l=InternetWriteFile_(hFile, mem, rest, @Bytes)
    EndIf
    CloseFile(0)
  EndIf
  InternetCloseHandle_(hFile)
EndIf

FreeMemory(mem)
ProcedureReturn y

EndProcedure
Diverse sachen können ja noch auf #PB_Any umgestellt werden, da ich
die Proc aus meinem Code gecuttet habe. Auf der selben weise ist es
auch möglich eine Schrittweise-Download Proc zu machen. Müsste man
halt nur mit InternetReadFile_() statt mit InternetWriteFile_() arbeiten. :wink:

Verfasst: 03.02.2007 20:57
von ts-soft
Grundsätzlich gehts auch ohne, aber mit Flutscht alles besser :wink:

Code: Alles auswählen

        Event=WindowEvent()
        If Event=#PB_Event_Gadget
          If EventGadget()=BreakID
            rest=0
            Break
          EndIf
        EndIf 
Bevor ich so eine holprige Abbruchfunktion einbaue, verzichte ich lieber :wink:

Verfasst: 03.02.2007 21:06
von al90
Es "Flutscht" auch ohne gut. :wink:
Und wieso sollte ich mich mit CallBacks rumquälen wenns auch so geht ?!
Bevor ich so eine holprige Abbruchfunktion einbaue, verzichte ich lieber
:lol:

Das ist eben mein stil. Den muss nicht jedem gefallen. Die einen quälen sich lieber
mit CallBacks rum die anderen machen's halt wie ich. Ansichtssache. :wink:

Verfasst: 03.02.2007 21:16
von ts-soft
Wer sagt den, das in diesen Moment der Abfrage, gerade das
Abbruch-Ereignis in der Ereigniswarteschlange von Windows steht. Wenn der
abbricht, ist es einfach nur "Glück gehabt"
Mit dem Messagehandling müssen sich hier noch so einige
auseinandersetzen :wink:
Selbst wenn alle anderen Controls deaktiviert sind, gibts noch hunderte von
anderen Ereignissen, die in diesem Moment dort stehen könnten, also noch
vor den Abbruchereignis, obwohl diese bereits ausgelöst wurde.

Verfasst: 03.02.2007 21:48
von al90
ts-soft hat geschrieben: Wenn der
abbricht, ist es einfach nur "Glück gehabt"
Falsch. Schau dir den code mal genauer an. :wink:
Es wird nur häppchenweise geuploadet (256 bytes). Ein abbruch ist jederzeit möglich.
Die Routine ist im grunde nichts anderes als so ähnlich wie die, die du
mal als "HD-Copy" proc geschrieben hast.
Nur das bei meiner ein Break möglich ist.

Verfasst: 03.02.2007 22:10
von ts-soft
>> Ein abbruch ist jederzeit möglich
Nein, eben nicht. da Du nur ein einziges Ereignis abfragst, liegt gerade ein
anderes an, verzögert sich der Abbruch um 256 Bytes, bei mehreren anderen
anliegenden Ereignissen, wird dann immer länger.
Wenn er zum Beispiel das Fenster bewegt, es gibt soviele Ereignisse, die das
erkennen des Abbruchs alle um 256 Bytes verschieben :mrgreen:
Ist nur ein Notlösung, das Callback ist eine Lösung :wink:
Nicht alles, nur weils anscheinend funktioniert, ist richtig oder machts auch
bei anderen.
Aber im Grunde ist es mir schnurz, wollte es nur erwähnen.

Verfasst: 03.02.2007 22:42
von al90
256 Bytes hin, 256 Bytes her. Ich konnte ja nicht wissen das du ein Perfektionist bist. :lol:

Ist aber schon ok. :wink: Im vergleich zu FtpPutFile_() dürfte die wahl
allerdings niemanden schwer fallen. <)