Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows error Codes + SHFileOperation (https://www.delphipraxis.net/79112-windows-error-codes-shfileoperation.html)

gmc616 16. Okt 2006 16:20


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:

A device attached to the system is not functioning.
:wiejetzt: kann doch nicht sein.
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

Christian Seehase 16. Okt 2006 16:59

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:
ShowMessage(SysErrorMessage(GetLastError));
Ob SHFileOperation LastError setzt, weiss ich allerdings nicht.

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.

gmc616 17. Okt 2006 11:29

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:

Datei kann icht umbenannt werden. Wählen Sie nur eine Datei, oder verwenden Sie MS-DOS-Platzhalter ...
Ich verwende SHFileOperation z.Z. so:
Delphi-Quellcode:
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;
Die Verzeichnisnamen in psFrom und psTo sind korrekt.
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:

Luckie 17. Okt 2006 11:38

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.

gmc616 17. Okt 2006 11:52

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