SendFTPFile(), Problem mit Linux 64bit

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Num500
Beiträge: 19
Registriert: 23.12.2004 18:50
Wohnort: Buchholz

SendFTPFile(), Problem mit Linux 64bit

Beitrag von Num500 »

Hallo,

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
Danke
Jürgen