Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Error Code 183 beim Datei überschreiben mit Rewrite. (https://www.delphipraxis.net/123684-error-code-183-beim-datei-ueberschreiben-mit-rewrite.html)

Thorben86 6. Nov 2008 15:53


Error Code 183 beim Datei überschreiben mit Rewrite.
 
Ich habe das Problem, dass mir die Funktion Rewrite(f) beim überschreiben den Error Code 183: "Cannot create a file when that file already exists." wirft. Geschrieben wird die Datei trotzdem korrekt.

Da die Funktion ja extra zum überschreiben von Dateien da ist, wundert mich der Fehler doch ein wenig.
Benutze Delphi 2005. Habe es auch schon ohne die beiden $IOChecks-Zeilen versucht.

ich benutze folgende Funtion (müsste hier aus dem Forum kommen, wenn mich nicht alles täuscht) zum schreiben der Datei:
Delphi-Quellcode:
function WriteData(filename : String; data: String; mode : TMode): Integer;
var
  f: TextFile;
begin
{$IOChecks OFF}
  AssignFile(f,filename);
  if (FileExists(filename) and (mode = a) ) then
    Append(f)
  else
    Rewrite(f);
  //Hier ist GetLastError() = 183
  Writeln(f, data);
  CloseFile(f);
  result := GetLastError();
{$IOCHECKS ON}
end;

Aufruf:
      if SaveDialog1.Execute then
        begin
          err := WriteData(SaveDialog1.Filename, data, r);
          if (err <> 0) then
            Showmessage ('Errorcode: '+ inttostr(err)+#13#10+SysErrorMessage(err));
        end;

MSSSSM 6. Nov 2008 16:30

Re: Error Code 183 beim Datei überschreiben mit Rewrite.
 
da steht allerdings ein aufruf mit "r"!
Und da ist noch so ein AND... :twisted:

Thorben86 6. Nov 2008 16:32

Re: Error Code 183 beim Datei überschreiben mit Rewrite.
 
TMode kann entweder a oder r sein. Und er soll die datei ja auch überschreiben (Mode = r --> <> a), von daher sollte das eigentlich korrekt sein.

ich könnte auch das ganze If rausnehmen und nur das rewrite stehen lassen, da kommt der Fehler trotzdem.

nahpets 6. Nov 2008 16:46

Re: Error Code 183 beim Datei überschreiben mit Rewrite.
 
Hallo,

stimmt, der letzte Fehler ist 183, aber das heißt nicht, dass die Datei nicht neu erstellt wurde, sondern nur, das irgendwo "unterwegs" mal der Fehler 183 aufgetreten ist und zwar bei der Prüfung von Rewrite, ob's die Datei schon gibt oder nicht.

Wenn ich Deinen Quelltext nehme und eine Datei erstelle, so erhalte ich jedes Mal diese Fehlermeldung und jedes Mal eine neue Datei.

Apollonius 6. Nov 2008 17:04

Re: Error Code 183 beim Datei überschreiben mit Rewrite.
 
Grundsätzlich kann GetLastError jeden Wert annehmen, wenn die Api-Funktion True zurückgibt (Ausnahmen bestätigen die Regel). Wenn du die Pascal-Routinen verwendest, wird GetLastError vollkommen irrelevant. Du musst IOResult verwenden, um Fehlercodes zu erhalten.

turboPASCAL 6. Nov 2008 17:31

Re: Error Code 183 beim Datei überschreiben mit Rewrite.
 
Zitat:

Du musst IOResult verwenden, um Fehlercodes zu erhalten
Würde ich auch mal meinen.


Delphi-Quellcode:
function WriteData(filename : String; data: String; Mode : TMode): Boolean;
var
  f: TextFile;
  IOErr: integer;
begin
  AssignFile(f, filename);

  {$IOChecks OFF}
  if FileExists(filename) and (Mode = a)
    then Append(f)
    else Rewrite(f);
  {$IOCHECKS ON}
  IOErr := IOResult;

  if IOErr = 0 then
  begin
    Writeln(f, data);
  end else
    ShowMessage('Ein Fehler ist aufgetreten ... ... Nr.: ' + IntToStr(IOErr));

  CloseFile(f);

  Result := BOOLEAN(IOErr = 0);
end;
( Ungetestet )

Thorben86 6. Nov 2008 17:42

Re: Error Code 183 beim Datei überschreiben mit Rewrite.
 
Ok, mit IOResult klappt es jetzt ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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