Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Exception mit gleichem Typ nochmal auslösen

  Alt 19. Mai 2023, 15:54
zuverlässigere
mmmmmmmmmmmmmmm, nja

Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
begin
  try
    raise EInOutArgumentException.Create('Der Text', 'C:\irgendwo');
  except
    on E: EInOutArgumentException do
      ShowMessage(Format('%s:'#10'%s'#10#10'Pfad="%s"', [E.ClassName, E.Message, E.Path]));
  end;

  try
    try
      raise EInOutArgumentException.Create('Der Text', 'C:\irgendwo');
    except
      on E: Exception do
        raise ExceptClass(E.ClassType).Create('My Message:'#10 + E.Message);
    end;
  except
    on E: EInOutArgumentException do
      ShowMessage(Format('%s:'#10'%s'#10#10'Pfad="%s"', [E.ClassName, E.Message, E.Path]));
  end;

  try
    try
      raise EInOutArgumentException.Create('Der Text', 'C:\irgendwo');
    except
      on E: Exception do begin
        var E2 := ExceptClass(E.ClassType).Create('My Message:'#10 + E.Message);
        if E2 is EInOutArgumentException then
          EInOutArgumentException(E2).Path := EInOutArgumentException(E).Path;
        raise E2;
      end;
    end;
  except
    on E: EInOutArgumentException do
      ShowMessage(Format('%s:'#10'%s'#10#10'Pfad="%s"', [E.ClassName, E.Message, E.Path]));
  end;
end;
Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
begin
  try
    if not FileCreate('C:\nicht da\himitsu', fmOpenRead, 0) = 0 then
      RaiseLastOSError;
  except
    on E: Exception do
      //if E.Message = 'Systemfehler. Code: 3.'#$D#$A'Das System kann den angegebenen Pfad nicht finden' then // Das passt so natürlich nur im deutschen Windows
      if (E is EOSError) and (EOSError(E).ErrorCode = {3}ERROR_PATH_NOT_FOUND) then // Winapi.Windows.pas
        ShowMessage('Pfad nicht gefunden')
      else if (E is EOSError) and (EOSError(E).ErrorCode = {5}ERROR_ACCESS_DENIED) then
        ShowMessage('Zugriff verweigert')
      else if E is EOSError then
        ShowMessage(Format('%s'#10'%s'#10#10'ErrorCode=%d'#10'ErrorText="%s"', [E.ClassName, E.Message, EOSError(E).ErrorCode, SysErrorMessage(EOSError(E).ErrorCode)]))
      else
        ShowMessage(Format('%s'#10'%s', [E.ClassName, E.Message]));
  end;
end;
$2B or not $2B

Geändert von himitsu (19. Mai 2023 um 16:11 Uhr)
  Mit Zitat antworten Zitat