![]() |
E/A-Fehler 103
Hi,
ich habe folgendes Problem. Mit dem unten dargestellten Code (Auszug aus dem Gesamtcode) soll ein Datenlogger programmiert werden, also ein Programm was ermöglicht Messwerte z.B. in einer Datei abzuspeichern. In meinem Beispiel erstelle ich ein CSV-Datei (kann von Excel gelesen werden). Es sollen immer 2000 Werte in eine Datei geschrieben werden und dann die nächste angelegt werden. Aber nachdem die Datei angelegt wurde und anscheinend Werte reingeschrieben wurden, kommt beim Ausführen der Anweisung closeFile(Datei) eine Exception der Klasse EInOutError mit der Meldung E/A-Fehler 103. Ich habe schon in der Delphi Hilfe nachgeschaut und dort stand '103 Datei nicht geöffnet'. Wenn ich dann die erstellte Datei öffne, ist sie leer. Wenn ich allerdings vorm else closeFile(Datei) schreibe, dann wird eine Messwertreihe (also eine Zeile) gespeichert. Und nun komme ich nicht mehr weiter denn ich will ja 2000 Werte in einer Datei speichern. Danke schonmal für Eure Bemühungen. MfG McSchuh
Delphi-Quellcode:
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
if ZaehlerMesswerte < 2000 then
begin ZaehlerMesswerte := ZaehlerMesswerte+1; DatumZeit := FormatDateTime('yyyymmddhhmmss', now); assignFile(Datei, DateiPfad+DatumZeit+'.csv'); rewrite(Datei); writeln(Datei,'Strom,Spannung,CosPhi,Temperatur,Uhrzeit'); writeln(Datei,Edit1.Text,',',Edit2.Text,',',Edit3.Text,',',Edit4.Text,',',Edit6.Text); end else begin closeFile(Datei); assignFile(Datei, DateiPfad+DatumZeit+'.csv'); rewrite(Datei); ZaehlerMesswerte := 0; writeln(Datei,'Strom,Spannung,CosPhi,Temperatur,Uhrzeit'); writeln(Datei,Edit1.Text,',',Edit2.Text,',',Edit3.Text,',',Edit4.Text,',',Edit6.Text); end; |
Re: E/A-Fehler 103
Delphi-Quellcode:
Reihenfolge immer :
if ZaehlerMesswerte < 2000 then
begin ZaehlerMesswerte := ZaehlerMesswerte+1; DatumZeit := FormatDateTime('yyyymmddhhmmss', now); assignFile(Datei, DateiPfad+DatumZeit+'.csv'); rewrite(Datei); writeln(Datei,'Strom,Spannung,CosPhi,Temperatur,Uhrzeit'); writeln(Datei,Edit1.Text,',',Edit2.Text,',',Edit3.Text,',',Edit4.Text,',',Edit6.Text); end else begin closeFile(Datei); <-- Fehler ! bei > 2000 wird closefile ohne das rewrite von < 2000 nicht aufgerufen ! assignFile(Datei, DateiPfad+DatumZeit+'.csv'); rewrite(Datei); ZaehlerMesswerte := 0; writeln(Datei,'Strom,Spannung,CosPhi,Temperatur,Uhrzeit'); writeln(Datei,Edit1.Text,',',Edit2.Text,',',Edit3.Text,',',Edit4.Text,',',Edit6.Text); end;
Delphi-Quellcode:
begin
rewrite (... Writeln ( ... CloseFile (... end; |
Re: E/A-Fehler 103
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo McSchuh,
die Kontrolle für die Umschaltung der log files ist fehlerhaft. Du erzeugst bei jedem Durchlauf die Datei neu (rewrite). Ich habe dir eine Demo angehängt. Grüße vom marabu |
Re: E/A-Fehler 103
Bin mir nicht mehr ganz sicher, weil ich eigentlich ausschließlich mit FileStreams arbeite, aber war es nicht so, dass Rewrite die Datei neu erstellt wenn sie noch nicht vorhanden ist, und zum Schreiben öffnet wenn es sie schon gibt?
|
Re: E/A-Fehler 103
Ween es die Datei schon gibt, wird sie von ReWrite geleert. Hier würde Append besser passen (setzt den Dateizeiger auch gleich ans Ende)
|
Re: E/A-Fehler 103
Vielen Dank für Eure guten Tipps. Habe es mit Append hinbekommen.
MfG McSchuh |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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