Problem mit OpenFileRequester
Verfasst: 26.03.2009 02:44
Und wieder gibts etwas Code von mir. Ich habe den Auftrag bekommen, ein kleines Tool zu programmieren. Dieses soll doppelte Leerzeichen im Dateinamen eines PDF-Dokumentes eliminieren. Prinzipiell funktioniert das Ganze schon sehr ordentlich, zumindest wenn man "wenige" Dateien auf einmal umbenennen will. Anders sieht es aus, wenn ich im OpenFileRequester gleich ein- bis zweitausend Dateien wähle ("Strg+A" machts möglich)
. Dann schreibt mir mein Programm hin, dass keine Dateien mit zwei Leerzeichen in Folge vorhanden wären. Dem ist aber definitiv so.
Also wie gesagt, bei 100 oder 200 Dateien funktioniert alles prima, nur bei volleren Ordnern nicht. Macke von Windows? Von PureBasic? Oder gar des Programmierers?

Also wie gesagt, bei 100 oder 200 Dateien funktioniert alles prima, nur bei volleren Ordnern nicht. Macke von Windows? Von PureBasic? Oder gar des Programmierers?
Code: Alles auswählen
Enumeration
#Hauptfenster
#Dateiliste
#ButtonLaden
#ButtonUmbenennen
#ButtonEnde
#Verlauf
EndEnumeration
Procedure.s NewName (Old.s)
For i=1 To Len (Old.s)-1
If Mid (Old.s, i, 1) =" " And Mid (Old.s, i+1, 1) =" "
; Zwei Leerzeichen?
Else
New.s+Mid (Old.s, i, 1)
EndIf
Next
New.s+Right (Old.s,1)
ProcedureReturn New.s
EndProcedure
OpenWindow (#Hauptfenster, 100, 100, 800, 650, "PDF Rename v0.1")
ListIconGadget (#Dateiliste, 10, 10, 600, 600, "alter Dateiname", 300)
AddGadgetColumn (#Dateiliste, 1, "neuer Dateiname", 1000)
ButtonGadget (#ButtonLaden, 620, 10, 170, 40, "Laden")
ButtonGadget (#ButtonUmbenennen, 620, 60, 170, 40, "Jetzt umbenennen")
ButtonGadget (#ButtonEnde, 620, 570, 170, 40, "Programm beenden")
ProgressBarGadget (#Verlauf, 620, 120, 170, 20, 0, 100)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #ButtonLaden
ClearGadgetItems (#Dateiliste)
File.s = OpenFileRequester("Bitte Dateien zum automatischen Umbenennen auswählen", GetCurrentDirectory (), "PDF (*.pdf)|*.pdf; *.PDF; *.Pdf", 0, #PB_Requester_MultiSelection)
zaehl=0
While File.s
If File.s<>NewName.s (File.s)
AddGadgetItem (#Dateiliste, -1, File.s+Chr(10)+NewName.s(File.s))
zaehl+1
EndIf
File.s=NextSelectedFileName ()
Wend
MessageRequester ("Information", "Es wurden "+Str(zaehl)+" Dateinamen gefunden, die 2 oder mehr Leerzeichen in Folge haben.")
Case #ButtonUmbenennen
SetGadgetAttribute (#Verlauf, #PB_ProgressBar_Maximum, CountGadgetItems (#Dateiliste))
If CountGadgetItems (#Dateiliste)
Wahl = MessageRequester ("Dateien umbenennen", "Soll der Vorgang jetzt ausgeführt werden?", #PB_MessageRequester_YesNo)
If Wahl = #PB_MessageRequester_Yes
Debug CountGadgetItems (#Dateiliste)
For zaehl=1 To CountGadgetItems (#Dateiliste)
Debug zaehl
File.s=GetGadgetItemText (#Dateiliste, zaehl-1, 0)
Debug File.s
Debug NewName (File.s)
If RenameFile (File.s, NewName (File.s))=0
Debug "Error"
EndIf
SetGadgetState (#Verlauf, zaehl)
Next
SetGadgetState (#Verlauf, 0)
MessageRequester ("Information", Str(zaehl-1)+" Dateien umbenannt.")
EndIf
ClearGadgetItems (#Dateiliste)
Else
MessageRequester ("Information", "Liste ist leer!")
EndIf
Case #ButtonEnde
ende=1
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow Or ende=1