Entwickler-Ecke

Dateizugriff - I/O error 105 !?


pHaRyNx - Do 28.08.08 13:27
Titel: I/O error 105 !?
moin.

ich habe folgendes problem: bei dem unten stehenden quelltext (beim ersten WriteLN) kommt besagter error:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
...
const konfig='konf.set';
var pw:string;
sd,ifr:Integer;
datei:textfile;

...
AssignFile(datei,konfig);
{$i-}
rewrite(datei);
{$i+}
WriteLN(pw);
WriteLN(IntToStr(sd));
WriteLN(verschl( IntToStr(sd) ));
WriteLN(IntToStr(ifr));
WriteLN(verschl(IntToStr(ifr)));
closefile(datei);


wäre nett, wenn mir jemand helfen könnte, ich hab keine ahnung, was da schief läuft...

mfg pHaRyNx

edit
mann bin ich doof :D ich hab schon lange nicht mehr delphi programmiert ich muss ja writeln(datei,...) schreiben.
hat sich erledigt


hansa - Do 28.08.08 13:29
Titel: Re: I/O error 105 !?
wenn schon, dann so :

user profile iconpHaRyNx hat folgendes geschrieben:
[delphi]
AssignFile(datei,konfig);
{$i-}
rewrite(datei);
{$i+}
WriteLN(datei,pw);


pHaRyNx - Do 28.08.08 13:31

joa, danke :-)...mein fehler.


delphi10 - Do 28.08.08 16:46

io-Error 105 = Datei ist nicht zum Lesen geöffnet.


hansa - Do 28.08.08 16:55

user profile icondelphi10 hat folgendes geschrieben:
zum Lesen geöffnet.


Klasse Beitrag. :mrgreen:


delphi10 - Do 28.08.08 17:46

Ein wenig Nachdenken fördert das Verständnis - auch das Zitieren klappt dann besser. :wink:


hansa - Do 28.08.08 17:52

was immer du damit sagen willst kapiere ich nicht. Error 105 heißt im Klartext : "Datei wurde nicht für Schreiboperationen geöffnet". Also eindeutiger Fall.


Delete - Do 28.08.08 20:30
Titel: Re: I/O error 105 !?
user profile iconhansa hat folgendes geschrieben:
wenn schon, dann so :

user profile iconpHaRyNx hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
AssignFile(datei,konfig);
{$i-}
rewrite(datei);
{$i+}
WriteLN([b]datei,[/b]pw);



Und warum machst du es wieder nur halb richtig? Du schaltest die fehlerbehandlung aus, aber implementierst keine eigen. Wenn dann so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
AssignFile(datei);
{$I-}
Rewrite(datei);
{$I+}
if IOResult = 0 then
begin
  Writeln(datei, 'Mein text.');
end
else
  // bei Fehler
  ShowMessage(SysErrorMessage(GetLastError));

Wen man das so macht, dann braucht man auch nicht lange rumrätseln, was Fehler 105 ist, da die Fehlermeldung im Klartext ausgegeb wird. Desweiteren stehen die IO Fehlercodes in der Hilfe. Man hätte also auch einfach mal selber nachgucken können, was Fehler 105 ist. Und mit etwas Nachdenken, hätte man dann wahrscheinlich auch selber die Lösung gefunden, ohne hir erst zu posten.


Chemiker - Do 28.08.08 22:19

Hallo

ich würde sogar sagen, dass es zwingend vorgeschrieben ist mit IOResult zu arbeiten!
Wenn ein Fehler auftritt, bei ausgeschalteter E/A-Prüfung werden keine nachfolgende E/A-Operationen durchgeführt.
Das bedeutet man sucht sich bei einem Fehler einen Wolf, weil man nicht bestimmen kann, wo der Fehler aufgetreten ist. Selbst wenn die nachfolgenden E/O-Operationen richtig sind.

Bis bald Chemiker


Delete - Do 28.08.08 22:36

Das predige ich schon seit Jahren. Eine vernünftige Fehlerbehandlung hilft auch ungemein dem Entwickler eventuell vorhandene Fehler zu finden. Aber irgendwie scheint den meisten eine Fehlerbehandlung überflüssig zu sein, seis, weil sie zu faul sind oder weil sie denken, "da kann nichts passieren, weil ich alles richtig mache". Und dann kommt so was wie oben gesehen bei raus.


hansa - Do 28.08.08 23:37
Titel: Re: I/O error 105 !?
user profile iconLuckie hat folgendes geschrieben:
user profile iconhansa hat folgendes geschrieben:
wenn schon, dann so :


Delphi-Quelltext
1:
2:
3:
4:
5:
AssignFile(datei,konfig);
{$i-}
rewrite(datei);
{$i+}
WriteLN([b]datei,[/b]pw);



Wieso werde ich da zitiert ? :shock: Habe den Fehler schließlich aufgedeckt. :mrgreen: Eins fehlt noch im Kontext : IOResult wertet man nicht so aus. Das übergibt man einer Variablen. Und die wird ausgewertet. So ungefähr :


Delphi-Quelltext
1:
io := ioresult.                    


Ansonsten ist die Gefahr sehr hoch so etwas zu versuchen :


Delphi-Quelltext
1:
writeln (ioresult);                    


8)


Delete - Do 28.08.08 23:44
Titel: Re: I/O error 105 !?
user profile iconhansa hat folgendes geschrieben:
Wieso werde ich da zitiert ?

Du weißt doch, immer auf die kleinen. :mrgreen:


hansa - Do 28.08.08 23:51
Titel: Re: I/O error 105 !?
user profile iconLuckie hat folgendes geschrieben:
Du weißt doch, immer auf die kleinen. :mrgreen:


Jaja, so aber nicht. Nicht mit mir. :mahn: Der soll bloss Variable verwenden, sonst krachts. :mrgreen: