Seite 1 von 1

API: SearchTreeforFile ergibt "Invalid Memory Access&qu

Verfasst: 06.08.2006 20:24
von MichaelW
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

Verfasst: 06.08.2006 20:41
von MichaelW
Habe das Problem gefunden....

Die Variable Treffer$ in meiner Prozedur musste ich vorher noch dimensionieren mit Treffer$ = Space(1024)

So einfach kann es manchmal sein.

Verfasst: 06.08.2006 20:52
von ts-soft
War ich zu langsam :wink:
Damit Windows was in den OutPathBuffer schreiben kann, sollte man dort
erstmal Platz schaffen :mrgreen:
Wenn in der API-Hilfe [out] steht, bzw. wenn sie einen String in einem
Parameter zurückgibt, ist dies immer erforderlich.

Verfasst: 06.08.2006 20:52
von AND51
Setz doch mal bei den Messagerequestern eine der #MB_* Konstanten (auch aus der API) ein. Diese findest du, wenn du nach der API Funktion MessageBox() suchst.

Hier sind einige:
#MB_ICONQUESTION
#MB_ICONERROR
#MB_ICONINFORMATION
#MB_ICONEXCLAMATION

und...? :wink:

SImpel, aber effektiv