Mit FTP-Server verbinden?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag 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:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag 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:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag 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. <)
Antworten