Windows error Codes + SHFileOperation
Hallo DPler,
ich versuche mit SHFileOperation ein Reihe von Verzeichnissen umzubenennen. Bei einem Großteil der Verzeichnisse funktioniert das wunderbar, aber bei einigen Verzeichnissen (immer den gleichen) halt nicht. SHFileOperation gibt mir dann einen ErrorCode 31 zurück. :gruebel: Nun hab ich das MSDN duchsucht und bin auf System Error Codes gestoßen. Dort wird geschrieben das 31 = ERROR_GEN_FAILURE ist: Zitat:
Alle Verzeichnisse, die umbenannt werden sollen, liegen auf der gleichen Platte, die sehr wohl funktioniert. Hab ich die richtigen Error Codes, oder was läuft da falsch? Grüße gmc |
Re: Windows error Codes + SHFileOperation
Moin gmc,
SHFileOperation liefert Dir keinen Errorcode zurück, sondern nur 0 (erfolgreich) oder ungleich 0 (Fehler). Nur so als Idee: Lass' Dir mal bei <> 0 den letzten Fehler anzeigen:
Delphi-Quellcode:
Ob SHFileOperation LastError setzt, weiss ich allerdings nicht.
ShowMessage(SysErrorMessage(GetLastError));
Du könntest die Funktion auch einfach mal so aufrufen, dass die Dialog nicht unterdrückt werden (Flags entsprechend setzen). Dann müsste Dir eigentlich eine Fehlermeldung angezeigt werden. |
Re: Windows error Codes + SHFileOperation
Danke Christian für den Tipp.
SHFileOperation scheint kein LastError zu setzen. "Der Vorgang wurde erfolgreich ausgeführt." ist ja wohl kein Fehler. Schöne wäre es, wenn der Vorgang erfolgreich gewesen wäre. :stupid: Aber das Weglassen des FOF_SILENT-Flags hat mir einen andere Fehlermeldung geliefert: Zitat:
Delphi-Quellcode:
Die Verzeichnisnamen in psFrom und psTo sind korrekt.
function fktRenameDir(psFrom, psTo: string) : boolean;
var shellinfo: TSHFileOpStruct; nErr : integer; begin shellinfo.Wnd := 0; shellinfo.wFunc := FO_RENAME; shellinfo.pFrom := PChar(psFrom); shellinfo.pTo := PChar(psTo); shellinfo.fFlags := FOF_ALLOWUNDO or // FOF_SILENT or // FOF_FILESONLY or FOF_NOCONFIRMATION; nErr := SHFileOperation(shellinfo); if nErr <> 0 then begin ShowMessage('Error: ' + inttostr(nErr) + ' ' + SysErrorMessage(GetLastError)); end; result := (nErr = 0) end; psFrom existiert und psTo existiert noch nicht. Die Verzeichnisse (ich benenne ja mehrere Verzeichnisse in einer Schleife um) sind teilweise leer, teilweise nicht. Das sollte aber mMn keinen Unterschied machen, da andere Verzeichnisse, egal ob leer oder nicht, korrekt umbenannt werden. Die Rechte diese Verzeichnisse umzubenennen habe ich auch. Irgendwie steh ich auf dem Schlauch. :freak: Kann doch wieder nur eine Kleinigkeit sein, die ich einfach übersehe :gruebel: |
Re: Windows error Codes + SHFileOperation
Die Dateilisten werden mit einem doppelten #0 abgeschlossen, also #0#0. #0 dient als Trenner zwischen den Dateien, wenn es mehrere sind.
Sakura hat in der Code-Lib eine Unit dafür geschrieben: FileWorks oder so. |
Re: Windows error Codes + SHFileOperation
Wow, Danke. :thumb:
Habs grad auch im MSDN gelesen. Ich wußte, es ist nur ne Kleinigkeit! :wall: War lesen kann ist klar im Vorteil! :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz