AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SHFileOperation löst Exception aus ?!
Thema durchsuchen
Ansicht
Themen-Optionen

SHFileOperation löst Exception aus ?!

Ein Thema von Orakel-von-Delphi · begonnen am 2. Jun 2005 · letzter Beitrag vom 12. Okt 2005
 
Benutzerbild von Orakel-von-Delphi
Orakel-von-Delphi

Registriert seit: 27. Jan 2004
Ort: Mittelhessen
45 Beiträge
 
Delphi 2007 Professional
 
#1

SHFileOperation löst Exception aus ?!

  Alt 2. Jun 2005, 14:23
Delphi-Quellcode:
.
.

function CopyDir(DirFrom, DirTo: string; Flags : integer = 0; bErrorHandler : boolean = True) : integer;
var
  shellinfo: TSHFileOpStruct;
  FromBuf, ToBuf : Array [0..255] of char;
begin
  If Not DirectoryExists(DirTo) Then
    begin
      Result := -1;
      Exit;
    end;

  Fillchar(shellinfo, Sizeof(shellinfo), 0 );
  FillChar(FromBuf, Sizeof(FromBuf), 0 );
  FillChar(ToBuf, Sizeof(ToBuf), 0 );
  StrPCopy(FromBuf, DirFrom);
  StrPCopy(ToBuf, DirTo);

  with shellinfo do
  begin
    Wnd := 0;
    wFunc := FO_COPY;
    pFrom := @FromBuf;
    pTo := @ToBuf;
    fFlags :=        FOF_SIMPLEPROGRESS or
              FOF_NOCONFIRMATION;
  end;

  Repeat
     try
      Result := SHFileOperation(shellinfo);
      SHFreeNameMappings(Cardinal(shellinfo.hNameMappings));
     except
      Result := GetLastError;
     end;
     if Not bErrorHandler then Exit;
     if Result <> 0 then
       begin
        if MessageDlg(Format('Das Verzeichnis'#13#10#13#10
                           + '''%s'''#13#10#13#10
                           + 'kann nicht nach'#13#10#13#10
                           + '''%s'''#13#10#13#10
                           + 'kopiert werden.'#13#10#13#10
                           + 'Grund: %s'#13#10#13#10
                           + 'Soll der Vorgang erneut versucht werden ?'#13#10#13#10
                           + 'Wenn Sie ''Abbrechen'' drücken, muss das Verzeichnis'#13#10
                           + 'oder die Dateien manuell kopiert werden !', [DirFrom, DirTo, GetFormatErrorMessage(Result)]),
                           mtWarning, [mbAbort, mbRetry], -1) <> mrRetry then
           break;
       end;
  until Result = 0;
end;

.
.

Usage:

.
.
CopyDir(IncludeTrailingPathDelimiter(GetCurrentDir) + DIRDATA + '\Dokumentation\*', sTemp);
.
.
Die Funktion CopyDir wird im Programm an verschieden Stellen verwendet. Beim Kopiervorgang eines größeren Verzeichnisses (ca. 6,5 MB in 162 Dateien) löst SHFileOperation hin und wieder eine Exception aus. Entweder Fehler 7 (The storage control blocks were destroyed) oder der Thread in dem der Vorgang abläuft stürzt ganz ab ohne einfangen der Exception. Alleine das wundert mich schon, da ein try .. except Block um die Funktion gebaut ist.

http://bugtrack.sporleder.de/image/installer_7.GIF

Weiß jemand Rat ? Googlen hat mir jedenfalls nicht geholfen
Michael
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 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