Forum: PC-Programmierung wie genau funktioniert CFile::Seek()


von Leo B. (luigi)


Lesenswert?

Hallo zusammen,

ich sitze hier gerade vor etwas Code von jemandem, der daran nicht mehr 
arbeiten wird. Leider steht er mir auch nicht mehr für Fragen zur 
Verfügung und jetzt muss ich mich so durchkämpfen.
Aktuell scheitere ich allerdings an dem Funktionsaufruf 
CFile::Seek(-1,2);
Ich habe eine Dokumentation gefunden, welche aller höchst wahrscheinlich 
dazu gehört:
http://msdn.microsoft.com/de-de/library/8c5ccz0x.aspx

So wie ich das Verstehe verschiebt die Funktion den Cursor um 2 Bytes 
richtung Anfang. Nun mein Problem ist jetzt aber, dass die Datei 
geöffnet wird [if ( !CFile::Open(...) ) ...], ein Byte gelesen wird 
[CFile::Read(&c,1)], dann dieses Byte geprüft und ggf. im Anschluss das 
CFile::Seek(-1,2); ausgeführt wird.
Wenn ich da jetzt richtig gerechnet habe, dann müsste der Cursor also 
auf -1 also noch ein Byte vor der Datei stehen, was natürlich Käse ist. 
Anscheinend hat diese Funktion aber nie Probleme gemacht, also muss ja 
irgendwas falsch sein an meiner Rechnung.

Stimmt ihr mir da zu oder kann mir jemand erklären wie dieses Seek 
wirklich funktioniert?

Vielen Dank
Leo

von g457 (Gast)


Lesenswert?

> So wie ich das Verstehe verschiebt die Funktion den Cursor um 2 Bytes
> richtung Anfang.

Ja. Aber beachte auch den zweiten Parameter (und haut dem Autor verbal 
eine rein, dass er nicht die dafür vorgesehenen Konstanten sondern eine 
Zahl genommen hat).

von Leo B. (luigi)


Lesenswert?

Oh man, die Dokumantation sollte man schon lesen können...
die 2 im seek(-1,2) ist vermutlich CFile::current. Ich plans grad nicht 
das richtig aufzulösen, aber der Curser wird wohl von der Aktuellen 
Position aus um 1 nach links verschoben, was wieder der Anfang ist...

Fazit: Erst die Doku auf Englisch umschalten, dann lesen. Auf Deutsch 
steht da wirklich nur schrott.

Sorry für den Fehlalarm.

von bluppdidupp (Gast)


Lesenswert?

Dateioffset nach öffnen der Datei: 0
nach Read(xxx,1): 1
nach Seek(-1,CFile::end): 0

von Georg (Gast)


Lesenswert?

bluppdidupp schrieb:
> nach Seek(-1,CFile::end): 0

Allerdings könnte man das auch einfacher, sicherer und verständlicher 
erreichen. Aber ein C-Programmierer schreibt natürlich möglichst 
unverständlichen Code, damit ihn der Chef nicht lesen kann. War eben 
schon immer eine Write-Only-Programmiersprache.

Georg

von Klaus W. (mfgkw)


Lesenswert?

Nur schade, daß alle, die sich Georg nennen, immer so pauschalisieren 
:-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.