Entwickler-Ecke

Alle Sprachen - Alle Plattformen - fstream.seekp / fstream.seekg in Delphi


Delete - Di 22.01.19 00:39
Titel: fstream.seekp / fstream.seekg in Delphi
- Nachträglich durch die Entwickler-Ecke gelöscht -


Th69 - Di 22.01.19 11:34

Hallo,

ein fstream ist sowohl lesend als auch schreibend (im Gegensatz zu jeweils ifstream und ofstream), so daß es für die Lese- und die Schreibposition 2 verschiedene Werte gibt (g und p stehen für get und put - keine tollen Namen m.E. ;- ).

Beim TStream gibt es wohl nur eine Position für beide: TStream.Position [http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Classes.TStream.Position].


Delete - Di 22.01.19 14:17

- Nachträglich durch die Entwickler-Ecke gelöscht -


Th69 - Di 22.01.19 15:15

Nicht direkt, sondern einfach nur

Delphi-Quelltext
1:
2:
// delphi
stream.Position := pos;

(d.h. es gibt nur genau 1 Lese- und Schreibposition in Delphi).

Zum Auslesen in C++ gibt es die beiden Funktionen tellg [http://www.cplusplus.com/reference/istream/istream/tellg/] und tellp [http://www.cplusplus.com/reference/ostream/ostream/tellp/], d.h. dies entspricht dann

Delphi-Quelltext
1:
2:
// delphi
pos := stream.Position;

Wenn du C++ Code hast, der unterschiedliche Lese- und Schreibpositionen benutzt, dann müßtest du das selber in Delphi nachhalten.


Delete - Di 22.01.19 15:50

- Nachträglich durch die Entwickler-Ecke gelöscht -


Th69 - Di 22.01.19 17:33

Wenn es jeweils die gleiche Variable beim Lesen und Schreiben ist, dann kannst du doch TStream benutzen, und mußt nur jeweils vor jedem Lesen und Schreiben die Position setzen:

Delphi-Quelltext
1:
2:
3:
4:
5:
stream.Position := pos;
stream.Read(...);

stream.Position := pos;
stream.Write(...);


PS: Drücke ich mich zu unverständlich aus?


Delete - Di 22.01.19 18:23

- Nachträglich durch die Entwickler-Ecke gelöscht -


Th69 - Di 22.01.19 21:05

Müsste es nicht eher fileStream.Read(data, BLOCK_SIZE) heißen?
Oder gibt man in Delphi bei einem Array den ersten Index an?
Oder werte mal den Rückgabewert von Read aus, ob wirklich die Anzahl Zeichen BLOCK_SIZE gelesen wurden.

Werden denn ohne encipher bzw. decipher die Daten korrekt gelesen und wieder zurückgeschrieben? Evtl. ist ja sonst ein Fehler in diesen Prozeduren.


Delete - Di 22.01.19 22:32

- Nachträglich durch die Entwickler-Ecke gelöscht -