bei der Verwendug von SendFTPFile() mit Parameter asyncron (#True)
für die Hintergrundübertragung wird das Executable unerwartet beendet.
Getestet mit Debian 8 (Jessi) 64bit und Xubuntu 16.04 64bit (in einer VM)
auf verschiedenen FTP-Servern.
Mache ich da einen Gedankenfehler oder fehlt eine "lib" (checkinstall.sh hat nicht gemeckert),
allerdings läuft es ja mit dem Parameter #False
Vielleicht kann sich einer das Beispiel mal anschauen und testen.
Code: Alles auswählen
; PureBasic-Version: 5.43-LTS
; ProgrammName: ftp_test_64bit
; Format: 64bit Linux
;
; Beispiel zum Problem mit SendFTPFile(...) bitte in den Zeile 62-63 auskommentieren
; Absturz nur unter Linux 64bit bei Parameter Asyncron = #True (1)
; auch getestet mit 64bit Version 5.40-LTS, 5.41-LTS, 5.42-LTS, 5.50
EnableExplicit
InitNetwork()
Enumeration
#ServerID_FTP
EndEnumeration
Define.s ServerName_FTP.s = "192.168.168.11" ; bitte entsprechend anpassen
Define.s UserName_FTP.s = "ftpuser" ; bitte entsprechend anpassen
Define.s UserKennwort_FTP.s = "*******" ; bitte entsprechend anpassen
Define.b AsyncronModus_FTP.b = #True
Define.l PortNummer_FTP.l = 21
Define.s ZielVerzeichnis_FTP.s = "/test/" ; bitte entsprechend anpassen
Define.s Datei_FTP.s
Define.q Fortschritt_FTP.q
Procedure ZielVerzeichnis_aktivieren(Pfad.s)
Protected i.l, Aktion.b = #False
If Right(Pfad.s,1) = "/"
Pfad.s = Left(Pfad.s, Len(Pfad.s)-1)
EndIf
If Left(Pfad.s,1) <> "/"
Pfad.s = "/" + Pfad.s
EndIf
If Pfad.s = "/"
Aktion.b = #True
Debug GetFTPDirectory(#ServerID_FTP) + " ist aktuelles Verzeichnis."
Else
For i = 1 To CountString(Pfad.s, "/")
If SetFTPDirectory(#ServerID_FTP, StringField(Pfad.s, i + 1, "/")) = #False
If CreateFTPDirectory(#ServerID_FTP, StringField(Pfad.s, i + 1, "/")) = #False
Debug StringField(Pfad.s, i + 1, "/") + " kann nicht erstellt werden, Abbruch!"
Aktion.b = #False
Else
Debug GetFTPDirectory(#ServerID_FTP) + " wurde erstellt."
Aktion.b = #True
EndIf
Else
Debug GetFTPDirectory(#ServerID_FTP) + " ist aktuelles Verzeichnis."
Aktion.b = #True
EndIf
Next i
EndIf
ProcedureReturn Aktion.b
EndProcedure
If OpenFTP(#ServerID_FTP, ServerName_FTP.s, UserName_FTP.s , UserKennwort_FTP.s, AsyncronModus_FTP.b, PortNummer_FTP.l)
Debug "Mit FTP-Server: "+ServerName_FTP.s+" verbunden."
If ZielVerzeichnis_aktivieren(ZielVerzeichnis_FTP.s) = #True
Datei_FTP.s = OpenFileRequester("Bitte Datei auswählen", "", "*.*", #False)
If Datei_FTP.s <> ""
SendFTPFile(#ServerID_FTP, Datei_FTP.s, GetFilePart(Datei_FTP.s), #True) ;funktioniert NICHT unter Linux 64bit
;SendFTPFile(#ServerID_FTP, Datei_FTP.s, GetFilePart(Datei_FTP.s), #False) ;funktioniert unter Linux 64bit
Repeat
Fortschritt_FTP.q = FTPProgress(#ServerID_FTP)
Debug Fortschritt_FTP.q
Delay(50)
Until FTPProgress(#ServerID_FTP) = -3 Or FTPProgress(#ServerID_FTP) = -2
Debug "Übertragung beendent mit "+Str(FTPProgress(#ServerID_FTP))
Else
Debug "Keine Datei zur Übertragung ausgewählt."
EndIf
Else
Debug "Verzeichnis "+ZielVerzeichnis_FTP.s+" konnte auf dem FTP-Server nicht ausgewählt werden."
EndIf
Else
MessageRequester("Fehler", "Keine Verbindung zum FTP-Server: "+ServerName_FTP.s)
EndIf
End
Jürgen