Seite 1 von 2

Verfasst: 05.04.2009 19:19
von al90
Da wir gerade bei FTP & Co sind: Nach dem erstellen mit CreateFTPDirectory()
und wechseln in dieses Leere Verzeichniss, Läuft bei mir erstmal garnix mehr.
Nach ca. 1 Min. meldet sich dann das proggi zurück.
Ist mir aufgefallen als ich die API in PFM durch die FTPLibrary von PB
ersetzen wollte. Jetzt hab ich erstmal wieder alles so bei API belassen,
da es z.Z. einfach besser funzt. (Dafür aber leider nicht mit allen FTPs)

BTW:
SetFTPDirectory() ist IMHO echt mies. Jeden unterordner immer einzeln aufrufen. :freak:

Kann man da nix machen wie bei der API ?

Verfasst: 05.04.2009 20:28
von Little John
al90 hat geschrieben:Da wir gerade bei FTP & Co sind: Nach dem erstellen mit CreateFTPDirectory()
und wechseln in dieses Leere Verzeichniss, Läuft bei mir erstmal garnix mehr.
[...]
Sorry, aber was hat das mit Fehlern in der Hilfe zu tun?

Gruß, Little John

Verfasst: 05.04.2009 20:39
von Kaeru Gaman
erstmal nur getrennt...
mal sehen ob das ne diskussion wird die ins "allgemein" gehört
oder als "bug" im sinne von "mangel" verstanden werden kann...

Verfasst: 05.04.2009 20:53
von Little John
Danke fürs Verschieben.
Hört sich IMHO nach Feature Request an.

Gruß, Little John

Verfasst: 05.04.2009 21:34
von STARGÅTE
kann den Bug nicht bestätigen:

Code: Alles auswählen

InitNetwork()
Time = ElapsedMilliseconds()
If OpenFTP(1, "***", "***", "***")
 Debug "OpenFTP ... "+Str(ElapsedMilliseconds()-Time)
 Debug "Verzeichnis:"+GetFTPDirectory(1)
 CreateFTPDirectory(1, "Beispiel")
 Debug "CreateFTPDirectory ... "+Str(ElapsedMilliseconds()-Time)
 Debug "Verzeichnis:"+GetFTPDirectory(1)
 SetFTPDirectory(1, "Beispiel")
 Debug "SetFTPDirectory ... "+Str(ElapsedMilliseconds()-Time)
 Debug "Verzeichnis:"+GetFTPDirectory(1)
 SetFTPDirectory(1, "..")
 Debug "Verzeichnis:"+GetFTPDirectory(1)
EndIf
OpenFTP ... 422
Verzeichnis:/
CreateFTPDirectory ... 578
Verzeichnis:/
SetFTPDirectory ... 735
Verzeichnis:/Beispiel
Verzeichnis:/
falls ich jetzt was falsch verstanden haben sagt es mir, aber ich kann ohne probs n Verzeichnis erstellen und dann dort hin wechseln und das auch schnell (siehe Millisekunden)

Ach und SetFTPDirectory habe ich bei mir ungeschrieben:

Code: Alles auswählen

Procedure SetFTPDirectoryEx(FTP, Directory$)
 Path$ = GetPathPart(Directory$)
 If Path$
  If SetFTPDirectoryEx(FTP, left(Path$, len(Path$)-1))
   ProcedureReturn SetFTPDirectory(FTP, GetFilePart(Directory$))
  EndIf
 Else
  ProcedureReturn SetFTPDirectory(FTP, GetFilePart(Directory$))
 EndIf
EndProcedure

Macro SetFTPDirectory(FTP, Directory)
 SetFTPDirectoryEx(FTP, Directory)
EndMacro
Damit geht dann sowas:

Code: Alles auswählen

 Debug "Verzeichnis:"+GetFTPDirectory(1)
 SetFTPDirectory(1, "Ordner/InnererOrdner/GanzDrin")
 Debug "Verzeichnis:"+GetFTPDirectory(1)
 SetFTPDirectory(1, "../..")
 Debug "Verzeichnis:"+GetFTPDirectory(1)
sollte dann zum schluss in Ordner landen

Verfasst: 07.04.2009 13:27
von walker
@AL90: verwendest Du noch die Version 4.20? da war dieser Fehler vorhanden....

Verfasst: 10.04.2009 18:19
von al90
@STARGÅTE

Hab den Fehler jetzt genauer analysiert. Also es liegt nicht an SetFTPDirectory,
sondern an ExamineFTPDirectory. Hab den Fehler auch schon im E-Forum gemeldet. :wink:

http://www.purebasic.fr/english/viewtopic.php?t=37056

walker hat geschrieben:@AL90: verwendest Du noch die Version 4.20? da war dieser Fehler vorhanden....
Ne ist schon die 4.30 die ich habe. (32Bit version)
Ich denke jetzt kann es jeder bestätigen. :wink:

Edit

Hier ein kleiner code zum testen.

Code: Alles auswählen

Procedure.l SetCurrentDirectoryFTP(Dir$)

If Dir$="" : Dir$="/" :EndIf
x=CountString(Dir$,"/")

For i=1 To x
  a$=StringField(Dir$,i,"/")+"/"
  result=SetFTPDirectory(0,a$)
  If result=0 : Break : EndIf
Next

ProcedureReturn result

EndProcedure

Servername$="MyServerName"
Username$="MyUsername"
Password$="MyPassword"

Dir$="/aaa/bbb/ccc/" ; <--- Unterordner (z.b. /ccc/) sollte Leer sein!!!

If InitNetwork()
  If OpenFTP(0,Servername$,Username$,Password$)
    If SetCurrentDirectoryFTP(Dir$)<>0
      StartTime=ElapsedMilliseconds()
      If ExamineFTPDirectory(0)
        Debug "ExamineFTPDirectory ausgeführt in "+Str((ElapsedMilliseconds()-StartTime)/1000)+" sekunden."
        While NextFTPDirectoryEntry(0)
          If FTPDirectoryEntryType(0) = #PB_FTP_File
            name$=FTPDirectoryEntryName(0)
            Debug name$
          EndIf
        Wend
        FinishFTPDirectory(0)
      EndIf
    Else
      MessageRequester("Error", "Ordner "+Dir$+" nicht gefunden!", #MB_OK|#MB_ICONERROR)
    EndIf
    CloseFTP(0)
  EndIf
EndIf

Verfasst: 10.04.2009 18:48
von STARGÅTE
Habe dein Code mal probiert, mit verschiedene Server (von mir) und verschiedenen Ordnern .. Leer und voll, bekomme immer
ExamineFTPDirectory ausgeführt in 0 sekunden.
das längste war ausgeführt in 1 sekunden.

Ich verwende Dein Code mit 4.30 ...
Die Ordner haben jeweils "normale" Rechte (755)

Verstehe also nicht warum es bei dir so lange dauert ...

Verfasst: 10.04.2009 18:54
von DarkDragon
Man muss es mit unterschiedlicher Serversoftware probieren.

Das liegt höchstwahrscheinlich daran, dass die verwendete FTP Serversoftware nicht die nötigen Endzeichen bei einer Textübertragung senden. ExamineFTPDirectory lädt ja eine Liste der Dateien runter und wenn die sowieso leer ist und kein End-Zeichen gesendet wird, dann wartet die Clientsoftware bis zum Timeout. Das ist bei HTTP auch manchmal der Fall. Viele Clients achten dann darauf, dass sie das Ende auch dann noch erkennen, wenn das End-Zeichen fehlt. Bei PB fehlt das vermutlich noch.

Verfasst: 10.04.2009 18:55
von al90
STARGÅTE hat geschrieben:Verstehe also nicht warum es bei dir so lange dauert ...
Hmm sehr kurrios das ganze. Also bei mir dauert es genau 30 sek. bei leere ordner.
Manchmal auch 29. Aber nie darunter. :o

Habs bis jetzt auch nur mit Vista getestet. Muss ich dann mal mit XP auf meinen
zweitrechner testen. Mal sehen was dann dabei rauskommt.