Frage zu TFileStream
-
Moin,
ich hab ein kleies Problem. Ich übertrage Daten über die FileStream-Methoden....Ich hab jetzt aber ein kleines Problem.
TFileStream öffnet die Datei immer Binär, also werden auch alle Steuerzeichen übertragen. Eigentlich ganz ok aber wenn ich eine alte DOS-Datei übertragen will, überträgt er auch das EOF zeichen mit. Und genau dass gibt ein Problem.
SO meine Frage:
Ist es Möglich einen TFileStream im TextMode zu öffnen (wie fopen ) ?
oder
Wie finde ich in dem Stream das EOF raus ?
-
Hallo,
Meines Wissens kann man TFileStream nicht in einen Textmodus schalten. EOF sollte doch eigentlich das letzte Zeichen sein. Schau doch einfach nach, ob am Schluß der Datei zweimal 0D 0A (oder 13 10) steht und entferne wenn nötig das letzte Zeichen.
-
Da hätte ich mal eine Ergänzungsfrage, die mich schon Jahre quält:
Wozu in Gottes Namens ist nun ein Binär-Modus und ein Text-Modus gut?
Eine Datei enthält Bytes.Punkt.
Was ich als Programm mit den Dingern mache ist doch meine Sache. Ich muss wissen die die zugeordnet/verarbeitet werden. Ob ich byteweise oder blockweise darauf zugreife und wie der Inhalt ist, muss ich beim Zugriff wissen.
Es gibt doch m.E. keine "Textdatei" oder eine "Binärdatei". Der Inhalt ist der gleiche -> Bytes. Man muss wissen was drin ist und danach programmieren.
-
Ohne Textmodus würden Funktionen wie getline ihren Sinn verlieren. Dann sind Streams ja nicht unbedingt auf Dateien beschränkt. Einlesen über die Tastatur erfolgt ja textorientiert. Wenn alles nur binär wäre, würde es hier schwieriger werden.
Es finden sich bestimmt noch mehr Argumente. Ich denke diese Zweiteilung hat auch historische Gründe, da früher ja alle Ein- und Ausgaben alphanumerisch, sprich textorientiert waren. Bilder, Töne und so kamen ja erst später.
-
Braunstein schrieb:
Hallo,
Meines Wissens kann man TFileStream nicht in einen Textmodus schalten. EOF sollte doch eigentlich das letzte Zeichen sein. Schau doch einfach nach, ob am Schluß der Datei zweimal 0D 0A (oder 13 10) steht und entferne wenn nötig das letzte Zeichen.
Danke erstmal für die schnelle Antwort....aber genau dass wollte ich nicht machen. Ich dachte mir man könnte den Stream gleich im Textmode öffnen...ohne NAchbearbeitung.
Ach ja ich nicht "0D 0A " =carriage return linefeed also "\n\r" ?
-
Bei TFileStream nicht. Du könntest fstream (bzw. ifstream) verwenden. Da kannst du die Datei wahlweise im text- oder im Binärmode öffnen.
-
Braunstein schrieb:
Bei TFileStream nicht. Du könntest fstream (bzw. ifstream) verwenden. Da kannst du die Datei wahlweise im text- oder im Binärmode öffnen.
ok...dass hört sich schon gut an, aber ich kann damit keine Pipes bedienen. Ich öffne nämlich keine Datei sondern eine Pipe, durch die ich dann die Datei transportiere ( die noch EOF-Zeichen auf Dos-Zeichen enthält was ich rausschneiden möchte ).
-
Wie machst du das mit der Pipe, über WinAPI (CreatePipe und so)?
Wo TFileStream geht sollte auch fstream irgendwie gehen.