auf meiner privaten Homepage archiviere ich - als Hobby-Mykologe - meine Bilder von Pilzen. Die Bilder werden nach festen Regeln benamt, so dass ich mit diversen php-Skripten nach Pilzarten, nach Datum etc. sortieren / filtern und darstellen kann.
Zur Verwaltung der umfangreichen Bilder-Sammlung (derzeit über 17000 Bilder) bin ich dabei, mir ein Verwaltungsprogramm in Purebasic zu programmieren. Bislang benenne ich die Bilder "auf dem Fußweg" und lade sie mit Filezilla auf die Website.
Nun stoße ich auf das Problem, dass ExamineFTPDirectory offensichtlich bei großen Verzeichnissen (mit vielen Dateien) einen Bug aufweist. Es werden beim Auflisten in unregelmäßigen (zumindest habe ich noch keine Regel erkennen können) Abständen Dateien ausgelassen und ggf. Bruchstücke von den ausgelassenen Einträgen dem nächsten Eintrag hinzugefügt. Außerdem ist auffällig (wenn auch nicht schlimm), dass die Dateien in umgekehrter alphabetischer Reihenfolge aufgelistet werden. Schöner wäre die alphabetische Reihenfolge.
Zum Test habe ich ein quotiertes FTP-Testverzeichnis (nimmt max. 10MB entgegen) und einen Test-FTP-User eingerichtet und in das Verzeichnis exakt 18000 Null-Byte-Textdateien abgelegt, deren Namen - bis auf eine vorangestellte 5-stellige laufende Nummer - exakt dem Muster entspricht, wie auch die Pilzbilder benamt werden.
Mit folgendem Test-Programm sieht man das fehlerhafte Verhalten:
Code: Alles auswählen
EnableExplicit
;
;**** Fenster ******************
Enumeration
#HauptFenster
EndEnumeration
;*******************************
;
;**** Gadgets ******************
Enumeration
#Gadget_Server_List
EndEnumeration
;*******************************
;
;***** FTP-Verbindungen ********
Enumeration
#FTP_Test
EndEnumeration
;*******************************
Global FTP_Server$ = "ftp://92.205.50.155"
Global FTP_UserName$ = "53556-Testuser"
Global FTP_Password$ = "PurebasicTest1!"
Global Aktuelles_FTP_Verzeichnis$ = ""
Define i = 0
Define Event = 0
If OpenWindow(#HauptFenster, 0, 0, 800, 600, "Test FTP-Bug", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_TitleBar|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
ListIconGadget(#Gadget_Server_List, 25, 25, 750, 550, "FTP-List", 700)
If OpenFTP(#FTP_Test, FTP_Server$, FTP_UserName$, FTP_Password$)
;MessageRequester("Meldung!","Verbindung erfolgreich aufgebaut!", #PB_MessageRequester_Ok)
i=1
If ExamineFTPDirectory(#FTP_Test)
While NextFTPDirectoryEntry(#FTP_Test)
;AddGadgetItem(#Gadget_Server_List, -1, Str(i) + " " + FTPDirectoryEntryRaw(#FTP_Test))
AddGadgetItem(#Gadget_Server_List, -1, RSet(Str(i), 5, "0") + " " + FTPDirectoryEntryName(#FTP_Test))
i = i + 1
Wend
FinishFTPDirectory(#FTP_Test)
Else
MessageRequester("Meldung!","Kann das FTP-Verzeichnis nicht auflisten!", #PB_MessageRequester_Ok)
EndIf
CloseFTP(#FTP_Test)
Else
MessageRequester("Meldung!","Verbindung konnte nicht aufgebaut werden!", #PB_MessageRequester_Ok)
EndIf
Repeat
Event = WaitWindowEvent()
Select Event
Case #Gadget_Server_List
;MessageRequester("Meldung!","Event im Gadget_Server_List!", #PB_MessageRequester_Ok)
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
End
Hier sieht man den korrekten Anfang des Verzeichnisses in Filezilla:
http://www.hessler-markus.de/FTP-Verzei ... Anfang.jpg
und hier das Ende der Verzeichnis-Auflistung:
http://www.hessler-markus.de/FTP-Verzei ... a_Ende.jpg
Als Purebasic-Version kommt die aktuelle LTS-Version 6.12 zum Einsatz.
Compiler-Optionen (auch wenn diese nichts mit dem Fehler zu tun haben):
http://www.hessler-markus.de/FTP-Test_C ... tionen.jpg
Über eine baldige Lösung des Problems (evtl. auch als Vorab-Patch) würde ich mich freuen.
Viele Grüße ans Purebasic-Team!
Markus