![]() |
Re: Fehler bei REWRITE
Zitat:
|
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:
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.
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; Du solltest die Standardnamen deiner Komponenten auf der Form möglichst schnell abändern - Edit1 ist einfach kein guter Name... Grüße vom marabu |
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; |
Re: Fehler bei REWRITE
Oder kürzer:
Delphi-Quellcode:
;)
ShowMessage(SysErrorMessage(GetLastError));
|
Re: Fehler bei REWRITE
Zitat:
|
Re: Fehler bei REWRITE
Delphi-Quellcode:
Hier kommt wieder die Fehlermeldung ...
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; |
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:
Ansonsten solltest Du dir einmal eine
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; ![]() |
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:
- Eine Datei speichern mit den ganzen Infos aus den edit-Feldern, deren dateiname sich aus edit1.text+' '+edit2.text zusammensetzt.
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; - 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 ... :( |
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 ;) |
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. |
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