Delphi-PRAXiS
Seite 3 von 7     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler bei REWRITE (https://www.delphipraxis.net/54630-fehler-bei-rewrite.html)

Luckie 8. Okt 2005 15:15

Re: Fehler bei REWRITE
 
Zitat:

Zitat von Chrissi91
Grrr ... ;) Geht dieser Code nun bei existierenen Dateien, die entweder leer oder nicht leer sind (mit Text ;)) und auch, wenn die Datei nicht existiert?

Probier es doch aus.

marabu 8. Okt 2005 15:16

Re: Fehler bei REWRITE
 
Klar geht der Code - ich würde ihn aber anders schreiben - wenn ich es nicht sogar ganz anders machen würde:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
const
  INDEX_FILENAME = 'Eintrage.txt';
var
  tf: TextFile;
  fileName: string;
begin
  fileName := Edit1.Text + ' ' + Edit2.Text + '.txt';
  AssignFile(tf, INDEX_FILENAME);
  if FileExists(INDEX_FILENAME)
    then Append(tf)
    else Rewrite(tf);
  WriteLn(tf, fileName);
  CloseFile(tf);
end;
Die von dir verwendeten Dateioperationen sind veraltet und stammen aus einer Zeit, als es noch keine Netzwerke und vor allem kein Multitasking gab. Unter Windows ist es gang und gäbe, dass du beim Testen eine Datei bearbeitest, die du nebenher in einem Editor offen hältst. Da musst du dann noch jede Menge Code zur Fehlerprüfung einbauen.

Du solltest die Standardnamen deiner Komponenten auf der Form möglichst schnell abändern - Edit1 ist einfach kein guter Name...

Grüße vom marabu

turboPASCAL 8. Okt 2005 16:05

Re: Fehler bei REWRITE
 
:gruebel: Nur mal so:
Delphi-Quellcode:
function GetIOResultErrString(Error: Integer): String;
begin
  case Error of
      2: Result:= 'Datei nicht gefunden';
      3: Result:= 'Ungültiger Dateiname';
      5: Result:= 'Zugriff verweigert';
     32: Result:= 'Verletzung bei der gemeinsamen Benutzung / kein Filesharing';

    100: Result:= 'EOF / Fehler beim Lesen vom Datenträger';
    101: Result:= 'Festplatte voll / Fehler beim Schreiben auf Datenträger';
    102: Result:= 'Dateivariable nicht zugewiesen';
    103: Result:= 'Datei nicht geöffnet';
    104: Result:= 'Datei nicht für Leseoperationen geöffnet';
    105: Result:= 'Datei nicht für Schreiboperationen geöffnet';
    106: Result:= 'Ungültige Eingabe / Ungültiges numerisches Format';
    107: Result:= 'Datei ist bereits geöffnet';
  end;
end;

procedure TForm.ButtonClick...
var
  fDatei: TextFile;
  FileName: String;
  Err: Integer;
begin
  FileName := 'Eintraege.txt';

  AssignFile(fDatei, FileName);

  {$I-}
  Append(fDatei);
  {$I+}
  Err := IOResult;
  if Err <> 0 then
  begin
    {$I-}
    rewrite(fDatei);
    {$I+}
    Err := IOResult;
  end;

  if Err = 0 then
  begin
    writeln(fDatei, edit1.text + ' ' + edit2.text);
    CloseFile(fDatei);
  end else
  begin
    ShowMessage('Fehler beim öffnen oder schreiben der Datei: "' +
      FileName + '"' + #13#10 +
      '(Fehler #' + IntTostr(Err) + ' - ' + GetIOResultErrString(Err) + ')');
  end;
end;

Luckie 8. Okt 2005 16:14

Re: Fehler bei REWRITE
 
Oder kürzer:
Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
;)

turboPASCAL 8. Okt 2005 16:20

Re: Fehler bei REWRITE
 
Zitat:

Zitat von Luckie
Oder kürzer: [...] ;)

jupp, aber hat man(n) dann noch was zu tippen ? soll ja Grundsätzliches sein mit Aha-Effekt ;)

Chrissi91 8. Okt 2005 16:28

Re: Fehler bei REWRITE
 
Delphi-Quellcode:
assignfile(datei2,'Eintrage.txt');
  if not fileexists('Eintrage.txt') then
  begin
  rewrite(datei2);
  end
  else
  begin
  reset(datei2);
  end;
  closefile (datei2);

  append(datei2);
  writeln(datei2, edit1.Text + ' ' + edit2.Text);
  closefile(datei2);
end;
Hier kommt wieder die Fehlermeldung ...

Sharky 8. Okt 2005 16:29

Re: Fehler bei REWRITE
 
Hai Chrissi91,

wie marabu ja schon angemerkt hat sollte man mit [oh]assignfile, Append, Writeln[/oh] und Co nicht mehr arbeiten. Es gibt da viel bessere möglichkeiten. Eine wäre zum Beispiel so:
*gg* Ich weiss, die sieht kompliziert aus. Ist sie aber nicht ;-)
Delphi-Quellcode:
resourcestring
  Env_AppData = 'APPDATA';

const
  INDEX_FILENAME = 'Eintrage.txt';

function AppDataDir: string;
begin
  //  Result := IncludeTrailingBackslash(GetEnvironmentVariable(ENV_APPDATA));
  Result := ExtractFilePath(ParamStr(0)); // Nur zum Test !!!!
end;

procedure Tfrm_Main.AdressList2Index(aValue: string);
var
  idx_List: TStream;
  mode : Word;
  tmpString: string;
  fileName : string;
begin
  fileName := AppDataDir + INDEX_FILENAME;
  try
    if (FileExists(fileName)) then
      mode := fmOpenReadWrite
    else
      mode := fmCreate;
    idx_List := TFileStream.Create(fileName,mode);
    idx_List.Seek(0,soFromEnd);
    tmpstring := aValue + #10 + #13;
    idx_List.Write(tmpString[1], Length(tmpString));
  finally
    idx_List.Free;
  end;
end;

procedure Tfrm_Main.btn_StoreAdressList2IndexClick(Sender: TObject);
var
  feld1 : string;
  feld2 : string;
begin
  if (dlg_Save_Adresslist.Execute) then
  begin
    feld1 := Edit1.Text;
    feld2 := Edit2.Text;
    AdressList2Index(feld1 + ' ' + feld2);
  end;
end;
Ansonsten solltest Du dir einmal eine Delphi-Referenz durchsuchenTStringList und deren Methoden [oh].Items.LoadFromFile, Items.SaveToFile , Items.Add[/oh] ansehen.

Chrissi91 8. Okt 2005 16:37

Re: Fehler bei REWRITE
 
Ich versuche es noch einmal zu erkläre ;), indem ich euch mal die ganze Prozedur zeige. Ich weiß: "Einrücken" :duck: Aber das Programm ist noch von früher, wo ich sowas noch nicht gemacht habe. Die Prozedur soll folgendes machen:

Delphi-Quellcode:
procedure TForm2.BitBtn1Click(Sender: TObject);
var
datei, datei2: textfile;
hilf: string;
begin
if (combobox1.text='')or
   (edit1.text='') or
   (edit2.text='')then
   begin
   showmessage('Bitte geben Sie Anrede, Vor - und Nachnamen an, um den Datensatz speichern zu können.');
   end else
   begin
if fileexists(edit1.text+' '+edit2.text+'.txt') then
begin
showmessage('Achtung! Es existiert schon ein Eintrag unter diesem Namen! Abbruch ...');
form2.visible:=false;
form1.Visible:=true;
combobox1.Text:='';
edit1.text:='';
edit2.text:='';
edit3.text:='';
edit4.text:='';
edit5.text:='';
edit6.text:='';
edit7.text:='';
edit8.text:='';
edit9.text:='';
edit10.text:='';
memo1.Text:='';
end else
begin
assignfile(datei,edit1.text+' '+edit2.text+'.txt');
rewrite(datei);
writeln(datei,combobox1.text);
writeln(datei,edit1.text);
writeln(datei,edit2.text);
writeln(datei,edit3.text);
writeln(datei,edit4.text);
writeln(datei,edit5.text);
writeln(datei,edit6.text);
writeln(datei,edit7.text);
writeln(datei,edit8.text);
writeln(datei,edit9.text);
writeln(datei,edit10.text);
writeln(datei,memo1.text);
closefile(datei);
assignfile(datei2,'Eintrage.txt');
  if not fileexists('Eintrage.txt') then
  begin
  rewrite(datei2);
  end
  else
  begin
  reset(datei2);
  end;
  closefile (datei2);

  append(datei2);
  writeln(datei2, edit1.Text + ' ' + edit2.Text);
  closefile(datei2);
end;

combobox1.Text:='';
edit1.text:='';
edit2.text:='';
edit3.text:='';
edit4.text:='';
edit5.text:='';
edit6.text:='';
edit7.text:='';
edit8.text:='';
edit9.text:='';
edit10.text:='';
memo1.Text:='';
form2.visible:=false;
form1.visible:=true;
end;
end;
- Eine Datei speichern mit den ganzen Infos aus den edit-Feldern, deren dateiname sich aus edit1.text+' '+edit2.text zusammensetzt.
- in eine datei eintrage.txt soll der dateiname rein:

wenn die datei eintrage.txt nicht existiert, soll sie erstellt werden und edit1.text+' '+edit2.text soll eingetragen werden

wenn die datei eintrage.txt existiert und leer ist, soll edit1.text+' '+edit2.text reingeschrieben werden

wenn die datei eintrage.txt existiert und schon einige dateinamen drinstehen, soll edit1.text+' '+edit2.text hinzugefügt werden.

wie mache ich das? der code funktioniert mittlerweile überhaupt nicht mehr ... :(

turboPASCAL 8. Okt 2005 16:39

Re: Fehler bei REWRITE
 
Mal so gefragt, welche Rechte besitzt Du auf dem Rechner und wo wird die Datei hingeschrieben. Ist die Datei irgend wo noch offen?
Welche Fehlermeldung, die selbe wie in deinem ersten Post ?

//Edit: Oha, ebend stand hier noch 'ne andere Frage ;)

Chrissi91 8. Okt 2005 16:54

Re: Fehler bei REWRITE
 
An meinem Rechner bin nur ich ... Es gibt nur 1 Benutzer. Die Datei ist 100%ig nicht offen vorher. Aber ich programmiere es gerade und habe es gleich geschafft. Eine Frage noch :-D:

Bei dem Befehl append:

Ist das so richtig?

assignfile(datei4,'Eintrage.txt');
append(datei4);
writeln(datei4,edit1.Text+' '+edit2.Text);
closefile(datei4);


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.
Seite 3 von 7     123 45     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz