Problem beim Schreiben in Datei mit fwrite()
-
Hallo,
ich habe folgendes Problem:
Ich lese eine Datei Byteweise ein, verschicke sie anschließend übers Netzwerk (mit sockets), lese auf der anderen Seite vom Socket und schreibe das dort in eine Datei.
Unter Unix Systemen funktioniert das wunderbar (egal ob ein System Little- oder Big-Endian), nur wenn ich eine Datei an einen Windows-Rechner schicken will, habe ich immer genau so viel Bytes weniger in der Datei wie ich Zeilen habe. Pro Zeile fehlt mir also genau ein Byte.
Windows verwendet als Zeilenende (soweit google und ich wissen) CR/LF wobei Unix Systeme nur LF verwenden, d.h. wenn ich ein Byte mehr gehabt hätte, hätte ich das eher verstanden.
Bei einer Textdatei sieht man auch keinen unterschied, allerdings will ich auch Binärdateien verschicken und da kommt das ja eher schlecht.Zum schreiben verwende ich fwrite() (gleicher Code unter Unix/Windows).
Geteschickt habe ich die Daten von meinem Linux Rechner (Kubuntu 7.04) auf Windows XP SP2.Weis jemand von euch vielleicht was das Problem sein könnte?
Danke im Voraus!
Rainer
-
Wie du schon richtig erkannt hast, liegt das an der unterschiedlichen Darstellung von Zeilenende-Zeichen (in C '\n', auf Systemseite "\n" (Linux)oder "\r\n" (Win) oder "\n\r" (afair auf Apple-Systemen)). Um das Problem zu umgehen, mußt du die Datei im Binärmodus öffnen, dann wird sie wirklich 1:1 so gelesen, wie sie auf Platte steht (dazu gibst du beim fopen() den Modus "rb" bzw. "wb" an).
-
Super!
Mach ich dann gleich malVielen Dank!
Rainer
-
Wollte nochmal kurz sagen dass nun ales perfekt funktioniert
Danke