CreateFTPDirectory + SetFTPDirectory

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag 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 ?
Little John

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Little John

Beitrag von Little John »

Danke fürs Verschieben.
Hört sich IMHO nach Feature Request an.

Gruß, Little John
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

Beitrag von walker »

@AL90: verwendest Du noch die Version 4.20? da war dieser Fehler vorhanden....
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von DarkDragon am 10.04.2009 18:55, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

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