_FTP_FilePut und Leerzeichen

  • Hi Leute...
    Ich habe ein Problem mit _FTP_FilePut.
    Wenn ich eine Datei hochlade, dessen Name Leerzeichen enthält, geht es nicht, er zeigt sofort an, dass es fertig ist, und auf dem Server ist auch nichts...
    Kann mir da jemand helfen?

  • Hi Leute...
    Ich habe ein Problem mit _FTP_FilePut.
    Wenn ich eine Datei hochlade, dessen Name Leerzeichen enthält, geht es nicht, er zeigt sofort an, dass es fertig ist, und auf dem Server ist auch nichts...
    Kann mir da jemand helfen?

    Hmm seh ich das richtig, du hast einen Websever und da willst du daten raufpacken, die um sozusagen eienn Patcher zu haben oder wie?

  • Eigener Patcher? Oo
    Ich möchte einfach Dateien auf meinen FTP Server machen, nur wenn im Namen dieser Datei Leerzeichen vorkommen, geht es nicht. xD

  • Das tut doch nichts zur Sache, ich möchte nur wissen, wie ich dieses Problem lösen kann!

    Hier mal der komplette Code, ab und zu zeigt er an, dass diese Datei nicht existiert, doch dann geht es wieder <-- noch ein Problem

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <FTPEx.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region Gui
    $Form1 = GUICreate("Fil0ad", 346, 140, 192, 124)
    $Group1 = GUICtrlCreateGroup("Datei Upload", 8, 8, 329, 49)
    $Label1 = GUICtrlCreateLabel("Pfad:", 16, 24, 29, 17)
    $Input1 = GUICtrlCreateInput("", 48, 24, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
    $Button1 = GUICtrlCreateButton("Suchen", 176, 24, 75, 25)
    $Button2 = GUICtrlCreateButton("Hochladen", 256, 24, 75, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Datei Download", 8, 64, 329, 49)
    $Label2 = GUICtrlCreateLabel("Dateiname:", 16, 80, 58, 17)
    $Input2 = GUICtrlCreateInput("", 80, 80, 121, 21)
    $Button3 = GUICtrlCreateButton("Herunterladen", 208, 80, 123, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label3 = GUICtrlCreateLabel("Status: Inaktiv", 8, 120, 256, 17)
    $Label4 = GUICtrlCreateLabel("Slots:", 272, 120, 30, 17)
    $slots = GUICtrlCreateLabel("X", 304, 120, 10, 17)
    GUICtrlCreateLabel("", 128, 120, 4, 4)
    $Label5 = GUICtrlCreateLabel(" / 8", 312, 120, 21, 17)
    GUISetState(@SW_SHOW)
    #EndRegion Gui

    [/autoit] [autoit][/autoit] [autoit]

    guictrlsetdata($Label3,"Status: Verbinden...")
    $ftpopen = _FTP_Open("FTP1")
    $ftpconnect = _FTP_Connect($ftpopen,"Sag ich dir nicht","Das auch nicht","und das auch nicht")
    guictrlsetdata($Label3,"Status: Verbunden!")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _deconnector()

    Case $Button1
    $fileopendialog1 = fileopendialog("Datei Hochladen",@scriptdir,"Alles (*.*)")
    if not $fileopendialog1 = "" Then
    guictrlsetdata($Input1,$fileopendialog1)
    EndIf

    Case $Button2
    $filetoupload = guictrlread($Input1)
    if not $filetoupload = "" Then
    guictrlsetdata($Label3,"Status: Hochladen...")
    $filetouploadnameonserver = StringRegExpReplace($filetoupload, '.+\\(.+)', '$1')
    _FTP_fileput($ftpconnect,$filetoupload,$filetouploadnameonserver)
    if not @error Then
    msgbox(64,"Datei Hochladen","Hochladen abgeschlossen.")
    guictrlsetdata($Label3,"Status: Verbunden!")
    Else
    msgbox(64,"Datei Hochladen","Hochladen fehlgeschlagen." & @crlf & "Ist die Datei eine Verknüpfung oder beschädigt?")
    guictrlsetdata($Label3,"Status: Verbunden!")
    EndIf
    EndIf

    Case $Button3
    $downloadname = guictrlread($Input2)
    guictrlsetdata($Label3,"Status: Herunterladen...")
    $filesizeonserver = _ftp_filegetsize($ftpconnect,$downloadname)
    if not $filesizeonserver <= 0 then
    _ftp_fileget($ftpconnect,$downloadname,$downloadname)
    msgbox(64,"Datei Herunterladen","Herunterladen abgeschlossen.")
    guictrlsetdata($Label3,"Status: Verbunden!")
    Else
    msgbox(64,"Datei Herunterladen","Diese Datei existiert nicht!")
    guictrlsetdata($Label3,"Status: Verbunden!")
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    func _deconnector()
    guictrlsetdata($Label3,"Status: Beenden...")
    _ftp_close($ftpopen)
    Exit
    EndFunc

    [/autoit]

    Manchmal schmiert es auch beim Verbinden einfach ab, und macht garnichts mehr...
    BITTE HELFEN!

    Einmal editiert, zuletzt von Hugbert (16. August 2011 um 00:10)

  • Hallo HugBert,

    verwende einfach Dateinamen ohne Leerzeichen, dann klappt es ja. Hast du schon einmal versucht mit einem FTP-Client wie z.B.: FileZilla Dateien mit Leerstellen auf diesen FTP-Server zu kopieren?
    Auf meinem FTP-Zugang funktioniert

    [autoit]

    _FTP_FilePut

    [/autoit]

    nämlich auch bei Dateien mit Leerstellen. Getestet mit example1 aus der Hilfe zu _FTP_FilePut.
    Eine andere Möglichkeit die zu prüfen ist ob diese Zeile:

    [autoit]

    $filetouploadnameonserver = StringRegExpReplace($filetoupload, '.+\\(.+)', '$1')

    [/autoit]

    wirklich einen zulässigen Dateinamen zurückliefert. Einfach danach

    [autoit]

    ConsoleWrite($filetoupload & @CRLF)

    [/autoit]

    einfügen und den Dateinamen überprüfen,

    mfg autoBert

  • Ich hatte es jetzt anders gelöst, aber jetzt das nächste Problem, ES GEHT EINFACH NICHT! Hier mal die Funktion:

    Spoiler anzeigen
    [autoit]

    func _uploader()
    $filetoupload1 = guictrlread($Input1)
    if not $filetoupload1 = "" Then
    msgbox(64,"Datei Hochladen","Falls deine Datei Leerzeichen enthält, werden diese durch ein" & @crlf & '"_"' & @crlf & "ersetzt.")
    guictrlsetdata($Label3,"Status: Hochladen...")
    $filetoupload2 = StringRegExpReplace($filetoupload1, ".+\\(.+)", "$1")
    $filetoupload3 = stringregexpreplace($filetoupload2," ","_")
    _FTP_fileput($ftpconnect,$filetoupload1,$filetoupload3)
    if not @error Then
    msgbox(64,"Datei Hochladen","Hochladen abgeschlossen." & @crlf & "Der Name der Datei auf dem Server ist:" & @crlf & $filetoupload3)
    guictrlsetdata($Label3,"Status: Verbunden!")
    Else
    msgbox(64,"Datei Hochladen","Hochladen fehlgeschlagen." & @crlf & "Ist die Datei eine Verknüpfung oder beschädigt?")
    guictrlsetdata($Label3,"Status: Verbunden!")
    EndIf
    Else
    msgbox(64,"Datei Hochladen","Du musst zuerst eine Datei auswählen!")
    EndIf
    EndFunc

    [/autoit]


    Es hängt einfach und macht garnichts, und nach 10 Minuten kommt die Meldung, dass das Hochladen fehlgeschlagen sei Oo
    Bitte helfen!!!

    Und ja, Es werden korrekte Dateinamen ausgegeben, aus denen ich dann die Leerzeichen mit _ ersetzen will, das geht auch, nur stoppt es halt beim Hochladen -.-

  • Hallo HugBert,

    ich habe eimal dein ursprüngliches Skript getestet. Dieses funktioniert bei mir einwandfrei, zumindest solange der FTP-Server erreichbar ist. Deshalb ein kleiner Änderungsvorschlag:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <FTPEx.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #region Gui

    [/autoit] [autoit][/autoit] [autoit]

    Global $ftpopen, $ftpconnect ;<================ hier

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("Fil0ad", 346, 140, 192, 124)
    $Group1 = GUICtrlCreateGroup("Datei Upload", 8, 8, 329, 49)
    $Label1 = GUICtrlCreateLabel("Pfad:", 16, 24, 29, 17)
    $Input1 = GUICtrlCreateInput("", 48, 24, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY))
    $Button1 = GUICtrlCreateButton("Suchen", 176, 24, 75, 25)
    $Button2 = GUICtrlCreateButton("Hochladen", 256, 24, 75, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Datei Download", 8, 64, 329, 49)
    $Label2 = GUICtrlCreateLabel("Dateiname:", 16, 80, 58, 17)
    $Input2 = GUICtrlCreateInput("", 80, 80, 121, 21)
    $Button3 = GUICtrlCreateButton("Herunterladen", 208, 80, 123, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label3 = GUICtrlCreateLabel("Status: Inaktiv", 8, 120, 256, 17)
    $Label4 = GUICtrlCreateLabel("Slots:", 272, 120, 30, 17)
    $slots = GUICtrlCreateLabel("X", 304, 120, 10, 17)
    GUICtrlCreateLabel("", 128, 120, 4, 4)
    $Label5 = GUICtrlCreateLabel(" / 8", 312, 120, 21, 17)
    GUISetState(@SW_SHOW)
    #endregion Gui

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Label3, "Status: Verbinden...") ;<============ und ab hier
    $ftpopen = _FTP_Open("FTP1")
    $ftpconnect = _FTP_Connect($ftpopen, "Sag ich dir nicht", "Das auch nicht", "und das auch nicht")
    If Not @error Then
    GUICtrlSetData($Label3, "Status: Verbunden!")
    GUICtrlSetState($Button3, $GUI_ENABLE)
    GUICtrlSetState($Button2, $GUI_ENABLE)
    Else
    GUICtrlSetData($Label3, "Status: Keine Verbindung!")
    GUICtrlSetState($Button3, $GUI_DISABLE)
    GUICtrlSetState($Button2, $GUI_DISABLE)
    EndIf
    ;<==================== bis hier anschauen Rest ist dein Original

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _deconnector()

    [/autoit] [autoit][/autoit] [autoit]

    Case $Button1
    $fileopendialog1 = FileOpenDialog("Datei Hochladen", @ScriptDir, "Alles (*.*)")
    If Not $fileopendialog1 = "" Then
    GUICtrlSetData($Input1, $fileopendialog1)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case $Button2
    $filetoupload = GUICtrlRead($Input1)
    If Not $filetoupload = "" Then
    GUICtrlSetData($Label3, "Status: Hochladen...")
    $filetouploadnameonserver = StringRegExpReplace($filetoupload, '.+\\(.+)', '$1')
    ConsoleWrite($filetoupload & @CRLF)
    _FTP_FilePut($ftpconnect, $filetoupload, $filetouploadnameonserver)
    If Not @error Then
    MsgBox(64, "Datei Hochladen", "Hochladen abgeschlossen.")
    GUICtrlSetData($Label3, "Status: Verbunden!")
    Else
    MsgBox(64, "Datei Hochladen", "Hochladen fehlgeschlagen." & @CRLF & "Ist die Datei eine Verknüpfung oder beschädigt?")
    GUICtrlSetData($Label3, "Status: Verbunden!")
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case $Button3
    $downloadname = GUICtrlRead($Input2)
    GUICtrlSetData($Label3, "Status: Herunterladen...")
    $filesizeonserver = _FTP_FileGetSize($ftpconnect, $downloadname)
    If Not $filesizeonserver <= 0 Then
    _FTP_FileGet($ftpconnect, $downloadname, $downloadname)
    MsgBox(64, "Datei Herunterladen", "Herunterladen abgeschlossen.")
    GUICtrlSetData($Label3, "Status: Verbunden!")
    Else
    MsgBox(64, "Datei Herunterladen", "Diese Datei existiert nicht!")
    GUICtrlSetData($Label3, "Status: Verbunden!")
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _deconnector()
    GUICtrlSetData($Label3, "Status: Beenden...")
    _FTP_Close($ftpopen)
    Exit
    EndFunc ;==>_deconnector

    [/autoit]

    mfg autoBert

  • Jaa! Ich weiß nicht wie du es gemacht hast, aber es geht :)

    Edit: Oder auch doch nicht -.- Wäre jemand so nett dass hier mal zu testen? Bei mir geht's nähmlich nicht...

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <FTPEx.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region Gui
    $Form1 = GUICreate("Fil0ad", 346, 140, 192, 124)
    $Group1 = GUICtrlCreateGroup("Datei Upload", 8, 8, 329, 49)
    $Label1 = GUICtrlCreateLabel("Pfad:", 16, 24, 29, 17)
    $Input1 = GUICtrlCreateInput("", 48, 24, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
    $Button1 = GUICtrlCreateButton("Suchen", 176, 24, 75, 25)
    $Button2 = GUICtrlCreateButton("Hochladen", 256, 24, 75, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Datei Download", 8, 64, 329, 49)
    $Label2 = GUICtrlCreateLabel("Dateiname:", 16, 80, 58, 17)
    $Input2 = GUICtrlCreateInput("", 80, 80, 121, 21)
    $Button3 = GUICtrlCreateButton("Herunterladen", 208, 80, 123, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label3 = GUICtrlCreateLabel("Status: Inaktiv", 8, 120, 256, 17)
    $Label4 = GUICtrlCreateLabel("Slots:", 272, 120, 30, 17)
    $slots = GUICtrlCreateLabel("X", 304, 120, 10, 17)
    GUICtrlCreateLabel("", 128, 120, 4, 4)
    $Label5 = GUICtrlCreateLabel(" / 8", 312, 120, 21, 17)
    GUISetState(@SW_SHOW)
    #EndRegion Gui

    [/autoit] [autoit][/autoit] [autoit]

    Global $ftpopen, $ftpconnect

    [/autoit] [autoit][/autoit] [autoit]

    guictrlsetdata($Label3,"Status: Verbinden...")
    $ftpopen = _FTP_Open("FTP1")
    $ftpconnect = _FTP_Connect($ftpopen,"SERVER","USERNAME","PW")
    if not @error then
    guictrlsetdata($Label3,"Status: Verbunden!")
    Else
    msgbox(64,"Fil0ad","Server nicht gefunden.")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    guictrlsetdata($Label3,"Status: Beenden...")
    _ftp_close($ftpopen)
    Exit

    Case $Button1
    $fileopendialog1 = fileopendialog("Datei Hochladen",@scriptdir,"Alles (*.*)")
    if not $fileopendialog1 = "" Then
    guictrlsetdata($Input1,$fileopendialog1)
    EndIf

    Case $Button2
    $filetoupload1 = guictrlread($Input1)
    if not $filetoupload1 = "" Then
    msgbox(64,"Datei Hochladen","Falls der Name deiner" & @crlf & "Datei Leerzeichen enthält, werden diese durch ein" & @crlf & '"_"' & @crlf & "ersetzt.")
    guictrlsetdata($Label3,"Status: Hochladen...")
    $filetoupload2 = StringRegExpReplace($filetoupload1, ".+\\(.+)", "$1")
    $filetoupload3 = stringregexpreplace($filetoupload2," ","_")
    consolewrite($filetoupload3)
    _FTP_fileput($ftpconnect,$filetoupload1,$filetoupload3)
    if @error Then
    msgbox(64,"Datei Hochladen","Hochladen fehlgeschlagen." & @crlf & "Ist die Datei eine Verknüpfung oder beschädigt?")
    guictrlsetdata($Label3,"Status: Verbunden!")
    Else
    filewrite("Fil0adLog.txt","ULd: " & $filetoupload3 & @crlf)
    msgbox(64,"Datei Hochladen","Hochladen abgeschlossen." & @crlf & "Der Name der Datei auf dem Server ist:" & @crlf & $filetoupload3)
    guictrlsetdata($Label3,"Status: Verbunden!")
    EndIf
    Else
    msgbox(64,"Datei Hochladen","Du musst zuerst eine Datei auswählen!")
    EndIf

    Case $Button3
    $filetodownload1 = guictrlread($Input2)
    guictrlsetdata($Label3,"Status: Herunterladen...")
    _ftp_filegetsize($ftpconnect,$filetodownload1)
    if @error then
    msgbox(64,"Datei Herunterladen","Diese Datei wurde nicht gefunden" & @crlf & "oder ein Fehler ist aufgetreten." & @crlf & "Bitte versuchen sie es erneut.")
    guictrlsetdata($Label3,"Status: Verbunden!")
    Else
    _ftp_fileget($ftpconnect,$filetodownload1,$filetodownload1)
    filewrite("Fil0adLog.txt","DLd: " & $filetodownload1 & @crlf)
    msgbox(64,"Datei Herunterladen","Herunterladen abgeschlossen.")
    guictrlsetdata($Label3,"Status: Verbunden!")
    EndIf

    EndSwitch
    WEnd

    [/autoit]

    2 Mal editiert, zuletzt von Hugbert (17. August 2011 um 12:40)

  • Hallo HugBert,

    auch dieses Progtamm läuftbei mir mit meinem Webspace einwandfrei. Aber ach hier noch ein minimaler Änderunsvorschlag:

    [autoit]

    $ftpconnect = _FTP_Connect($ftpopen, "Server", "Benutzer", "Passwort")
    If Not @error Then
    GUICtrlSetData($Label3, "Status: Verbunden!")
    Else
    _FTP_Close($ftpopen) ;<==================================
    MsgBox(64, "Fil0ad", "Server nicht gefunden.")
    Exit
    EndIf

    [/autoit]

    Dieser Else-Zweig sollte zwar bei korrekten Zugangsdaten und funktionierendem FTP-Server nie vorkommen es kann aber keinesfalls schaden die FTP-Sitzung korrekt zu beenden.

    PS.: Ich teste als Nich-Admin auf Win XP SP3 #RequireAdmin ist bei mir entfernt dies wird nicht benötigt ausser du wilst es nur den Admin benutzen lassen dazu kannst du aber auch IsAdmin benutzen,

    mfg autoBert

  • Ich möchte es meinen Freunden geben, und einige von denen haben Windows 7, und dort gehen die FTP Befehle nur als Admin.
    PS: Wo hast du deinen Webspace? Bei einem Freehoster?