Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi E/A-Fehler 103 (https://www.delphipraxis.net/53129-e-fehler-103-a.html)

McSchuh 10. Sep 2005 20:54


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:
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;
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Hansa 10. Sep 2005 21:30

Re: E/A-Fehler 103
 
Delphi-Quellcode:
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;
Reihenfolge immer :

Delphi-Quellcode:
begin
  rewrite (...
  Writeln ( ...
  CloseFile (...
end;

marabu 11. Sep 2005 09:18

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

tigerman33 11. Sep 2005 09:56

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?

Phistev 11. Sep 2005 11:02

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)

McSchuh 11. Sep 2005 19:24

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