API: SearchTreeforFile ergibt "Invalid Memory Access&qu
Verfasst: 06.08.2006 20:24
Hallo Coding Gemeinschaft,
bisher eher im Bereich Visual Basic tätig bin ich nun auf PureBasic umgestiegen. Zuerst ein dickes Lob an die Entwickler dieses Compilers.
Hat man sich an den sequentiellen Programmierstil gewöhnt, kann man sich nur noch wundern, wie einfach sich so manches Problem lösen lässt.
Die Zeitersparnis ist enorm.
Prinzipiell bin ich jedoch immer noch Anfänger, was PB betrifft.
Nun zu meinem Problem.
Also ich bin gerade dabei, das CodeArchiv von PureArea.net per PBSourceConverter zu PB4 zu konvertieren bzw. ist bereits erledigt.
Nun habe ich alle, müssen so um die 1350 Dateien sein, konvertierten Codes in einem Verzeichnis liegen. Das Codearchiv ist halt in meinem PureBasic Pfad mit den entsprechenden Unterverzeichnissen entpackt.
Zuerst habe ich angefangen die konvertierten Sources "zu Fuss" in die entsprechenden Zielverzeichnisses zu kopieren. Da bin ich bald wahnsinnig geworden bei der enormen Anzahl der verschachtelten Unterverzeichnisse.
Also dachte ich mir, schreibe ich mir doch einfach ein Proggie, was die Arbeit für mich erledigt. Um das Rad nicht nochmals zu erfinden, stiess ich bei der Lösung des Problems auf die API SearchTreeforFile.
Der Code:
OpenConsole()
Procedure.s SucheDateiinPfad(NameDatei$)
If SearchTreeForFile_("c:\program files\PureBasic\Examples\CodeArchiv",NameDatei$,Treffer$)
ProcedureReturn Treffer$
Else
MessageRequester("Information", "Gesuchte Datei konnte nicht gefunden werden.")
EndIf
EndProcedure
If ExamineDirectory(0,"c:\data","*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
DateiName.s = DirectoryEntryName(0)
ZielPfad.s = SucheDateiinPfad(DateiName)
If ZielPfad <> ""
CopyFile("c:\data\" + DateiName, ZielPfad)
EndIf
EndIf
Wend
FinishDirectory(0)
EndIf
CloseConsole()
End
Ob ich die Console oder den MessageRequester in der Procedure überhaupt brauche, weiss ich gar nicht.
Wenn ich das Proggie mit Debugger kompiliere bekomme ich die Fehlermeldung: "Invalid memory access" bei der Zeile "If SearchTreeforFile...."
Ich vermute mal, dass ich die API falsch benutze.
Weiss jemand, wie es richtig geht? (Man lernt ja schliesslich nie aus)
Für konstruktive Kritik immer dankbar
Gruss Michael
bisher eher im Bereich Visual Basic tätig bin ich nun auf PureBasic umgestiegen. Zuerst ein dickes Lob an die Entwickler dieses Compilers.
Hat man sich an den sequentiellen Programmierstil gewöhnt, kann man sich nur noch wundern, wie einfach sich so manches Problem lösen lässt.
Die Zeitersparnis ist enorm.
Prinzipiell bin ich jedoch immer noch Anfänger, was PB betrifft.
Nun zu meinem Problem.
Also ich bin gerade dabei, das CodeArchiv von PureArea.net per PBSourceConverter zu PB4 zu konvertieren bzw. ist bereits erledigt.
Nun habe ich alle, müssen so um die 1350 Dateien sein, konvertierten Codes in einem Verzeichnis liegen. Das Codearchiv ist halt in meinem PureBasic Pfad mit den entsprechenden Unterverzeichnissen entpackt.
Zuerst habe ich angefangen die konvertierten Sources "zu Fuss" in die entsprechenden Zielverzeichnisses zu kopieren. Da bin ich bald wahnsinnig geworden bei der enormen Anzahl der verschachtelten Unterverzeichnisse.
Also dachte ich mir, schreibe ich mir doch einfach ein Proggie, was die Arbeit für mich erledigt. Um das Rad nicht nochmals zu erfinden, stiess ich bei der Lösung des Problems auf die API SearchTreeforFile.
Der Code:
OpenConsole()
Procedure.s SucheDateiinPfad(NameDatei$)
If SearchTreeForFile_("c:\program files\PureBasic\Examples\CodeArchiv",NameDatei$,Treffer$)
ProcedureReturn Treffer$
Else
MessageRequester("Information", "Gesuchte Datei konnte nicht gefunden werden.")
EndIf
EndProcedure
If ExamineDirectory(0,"c:\data","*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
DateiName.s = DirectoryEntryName(0)
ZielPfad.s = SucheDateiinPfad(DateiName)
If ZielPfad <> ""
CopyFile("c:\data\" + DateiName, ZielPfad)
EndIf
EndIf
Wend
FinishDirectory(0)
EndIf
CloseConsole()
End
Ob ich die Console oder den MessageRequester in der Procedure überhaupt brauche, weiss ich gar nicht.
Wenn ich das Proggie mit Debugger kompiliere bekomme ich die Fehlermeldung: "Invalid memory access" bei der Zeile "If SearchTreeforFile...."
Ich vermute mal, dass ich die API falsch benutze.
Weiss jemand, wie es richtig geht? (Man lernt ja schliesslich nie aus)
Für konstruktive Kritik immer dankbar
Gruss Michael