Entwickler-Ecke

Dateizugriff - E/A - Fehler 32


SimonSchlüter - Do 14.07.11 08:18
Titel: E/A - Fehler 32
Hallo zusammen!

Ich hoffe es kann mir hier jemand helfen.

Mein Delphi-Programm ( Delphi 5 ) arbeitet mit Dateizugriffen.
Es lief lange Zeit unter Windows XP Home ohne Probleme.
Jetzt bekomme ich plötzlich bei jedem Dateizugriff "E/A - Fehler 32".
Was der Fehler bedeutet weiß ich bereits, ich kann mir leider nur nicht erklären, warum es auf einmal nicht mehr funktioniert.

Vielen Dank schonmal im Voraus!


Horschdware - Do 14.07.11 09:50

Dieser Fehler deutet darauf hin, dass die Datei noch geöffnet ist, d.h. ein Handle darauf noch offen ist.
Um genau sagen zu können, warum und wo genau der Fehler auftritt, wäre wohl ein wenig Code sinnvoll. Vergisst du eventuell die Datei nach Bearbeitung wieder zu schliessen?


Delete - Do 14.07.11 10:58

Ohmmmmmmmmmmmmmmmmmmmmmmmmm
Der Blick in meine Glaskugel sagt mir, dass du die Dateizugriffsvariable global deklariert hast und inzwischen den Überblick verloren hast, wo du die Datei öffnest und wieder schließt. Deswegen soll man solche Variablen nur lokal deklarieren. Oder wenn sie von mehreren Routinen benötigt wird, diese in eine Klasse kapseln und die Dateizugriffsvariable zu einem Attribut der Klasse machen.


SimonSchlüter - Do 14.07.11 11:17

Also die Variablen sind nicht global deklariert.

Das Programm hat auch (ohne Änderung) lange funktioniert.

Hier die Procedure:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure savecfgline(betrieb : Integer; filename,name,value : String);
var f : Textfile;
    arr : Array[1..3000of string;
    line,lines,i  : Integer;
begin
  //Einlesen
  if betrieb <= 0 then chdirtoApppath
  else chdirtoBetrpath(betrieb);
  assignfile(f,filename);
  if fileexists(filename) then begin
    reset(f)
  end else begin
    rewrite(f);
    reset(f);
  end;
  lines:=0;
  while not eof(f) do
  begin
    inc(lines);
    readln(f,arr[lines]);
  end;
  closefile(f);

  //Name suchen
  line:=-1;
  if lines>0 then
  for i:=1 to lines do
    if uppercase(name)=uppercase(copy(arr[i],1,pos(':',arr[i])-1)) then line:=i;
  //Wenn nicht gefunden, anhängen
  if line=-1 then
  begin
    inc(lines);
    line:=lines;
  end;

  //Wert eintragen
  arr[line]:=name+': '+value;

  //Abspeichern
  Rewrite(f);
  append(f);
  for i:=1 to lines do writeln(f,arr[i]);
  flush(f);
  closefile(f);
end;


Die Datei liegt in einem Unterverzeichnis des Programmverzeichnisses.


Delete - Do 14.07.11 11:50

Es lief unter Windows XP Home? Und unter welchen Windows läuft es jetzt nicht mehr?


SimonSchlüter - Do 14.07.11 11:53

Unter dem selben System. Das Programm lief vor ein paar Tagen noch. Jetzt läuft es nicht mehr.


Delete - Do 14.07.11 12:02

Hast du am System oder am Programm was geändert? Wenn du am Programm was geändert hast, dann mache die Änderungen mal Schritt für Schritt rückgängig.


jaenicke - Do 14.07.11 12:03

user profile iconSimonSchlüter hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  if fileexists(filename) then begin
    reset(f)
  end else begin
    rewrite(f);
    reset(f);

  end;
Dann existierte die Datei bisher immer. Denn zuerst die Datei mit Rewrite öffnen und dann ein zweites Mal mit Reset öffnen kann nicht funktionieren...

user profile iconSimonSchlüter hat folgendes geschrieben Zum zitierten Posting springen:
Die Datei liegt in einem Unterverzeichnis des Programmverzeichnisses.
Aua... :shock:
http://www.delphi-library.de/viewtopic.php?p=548600


SimonSchlüter - Do 14.07.11 12:06

Ok Danke für den Tipp. Ich werde das reset(f); rausnehmen und es mal ausprobieren und melde mich gleich wieder....


SimonSchlüter - Do 14.07.11 12:24

[/quote]Aua... :shock:
http://www.delphi-library.de/viewtopic.php?p=548600[/quote]

Daran liegt es nicht. Wenn ich das Programm in das Benutzerverzeichnis installiere oder auf D:\ funktioniert es genau so wenig.


Delete - Do 14.07.11 12:41

Ja, aber bei mir wird es gar nicht funktionieren, wenn ich das Programm installiere bzw. dahin kopiere, wo es hin gehört, nämlich in das Programmverzeichnis. denn im Gegensatz zu dir arbeite ich nicht als Administrator aus Sicherheitsgründen an meinem Rechner. Und als Benutzer mit eingeschränkten Rechten hat man im Programmverzeichnis keine Schreibrechte.

\me fragt sich, wie viele Jahre und wie viele Windows Versionen es noch braucht, bis sich das endlich mal rumgesprochen hat. :roll:


SimonSchlüter - Do 14.07.11 12:43

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Ja, aber bei mir wird es gar nicht funktionieren, wenn ich das Programm installiere bzw. dahin kopiere, wo es hin gehört, nämlich in das Programmverzeichnis. denn im Gegensatz zu dir arbeite ich nicht als Administrator aus Sicherheitsgründen an meinem Rechner. Und als Benutzer mit eingeschränkten Rechten hat man im Programmverzeichnis keine Schreibrechte.

\me fragt sich, wie viele Jahre und wie viele Windows Versionen es noch braucht, bis sich das endlich mal rumgesprochen hat. :roll:


Ah ja OK danke sehr Konstruktiv!