@ Jaenicke: Ähm, ja... Und daurch, dass du nichts geschrieben hast, hab ich natürlich auch gewusst, was für Informationen noch gebraucht werden, nicht wahr? Und den Debugger hab ich durchaus auch schon mal genutzt. Da ich aber ja nichts sinnvolles gefunden habe, hab ich die Frage hier gestellt. Alles andere wäre irgendwie ein wenig... witzlos.
@ Hathor: Du hast Recht, das war ein kleiner Copy-Paste Fehler. Ist behoben.
-------------------------
Das Problem mit den Laufwerksbuchstaben hab ich jetzt rausgefunden. Das liegt daran, dass der Buffer in
GetVolumeName seinen alten Wert behält. Mit einem reinitialisieren auf #0 nach dem result oder vor
GetVolumeInformation behebt das Problem.
Dafür gibt es ein neues Problem: Das Kopieren an sich funktioniert nicht. Mit einfachen Testordnern (ein Ordner, ein leeres txt-file darin) funktionierts, aber bei meinen Ordnern klappts nicht (mehrere Dateien und Unterordner). Ich habe mir nochmal eingehend die Structs und den API-Aufruf angeschaut und die oben gepostete
CopyDir-Funktion nochmal ein wenig abgeändert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function CopyDir(const fromDir, toDir: string): Boolean; var fos: TSHFileOpStruct; begin ZeroMemory(@fos, SizeOf(fos)); with fos do begin wFunc := FO_COPY; fFlags := FOF_NOCONFIRMMKDIR; pFrom := PChar(fromDir + #0); pTo := PChar(toDir + #0) end; Result := (0 = ShFileOperation(fos)); end; |
Ich hab bei den Flags FOF_FILESONLY rausgenommen, so dass ich sicher sein kann, dass auch die Unterordner kopiert werden.
FOF_NOCONFIRMMKDIR hab ich dazugenommen, mit dem Gedanken, dass das Kopieren deswegen vlt. nicht klappt (und es sinnvoll ist)
Und dann steht in der Hilfe, dass pTo auch doppelt Nullterminiert sein soll, deswegen dann noch ein #0 hinten dran.
Nichts desto trotz funktionierts nicht. Ich bekomm aber keine Fehler, sondern
ShFileOperation liefert einfach nicht 0 zurück.
Der pFrom-Pfad existiert (wird geprüft) und der pTo-Pfad soll ohne Nachfrage angelegt werden, wobei das Laufwerk auch existiert (wird auch geprüft). Was kann ich also tun, um rauszufinden, wo mein Fehler liegt? Was mach ich bei dem Aufruf falsch?
Grüße Kay