Bei Binär-Daten ASCII(26) vermeiden
-
Hi,
kennt sich niemand von euch damit aus???
Hatte noch nie jmd. Probleme eine Datei zu lesen wh. EOF???
-
Zeig mal wie du die Datei öffnest... Beim öffnen musst du den Modus ios::binary wählen
-
Hi,
ich hab hier mal einen kleinen Beispiel-Source zum Testen:#include <cstdio> #include <fstream> using namespace std; int main(int argc, char *argv[]) { // ofstream testen ofstream os; os.open("test",ios::binary); int tst1; int from = 20; int to = 30; for(int i=from;i<to;i++) { tst1 = i; os.write( (char*)&tst1, sizeof(int) ); } os.close(); // ifstream testen ifstream is; is.open("test",ios::binary); int tst2; for(int i=from;i<to;i++) { is.read( (char*)&tst2, sizeof(int) ); printf("V: %i\n",tst2); } is.close(); }
Kompiliert mit Dev-C++ bekomme ich folgenden Output:
V: 37889464
V: 37889464
V: 37889464
V: 37889464
V: 37889464
V: 37889464
V: 37889464
V: 37889464
V: 37889464
V: 37889464Macht das irgendwie Sinn???
Wo liegt mein Fehler??
Gruss, Tobias
-
Bei mir funktioniert es (g++ 3.2.2, Linux).
-
genau das gleiche???
Bei mir klappt es mit Dev-C++ und Visual C++ unter Windows 2000 NICHT!!!
Ich kann's mir echt nicht erklären!
Gruss, Tobias
-
Ich habs mit dem VC++6 und Win2000 getestet...
Mein Output:V: 20 V: 21 V: 22 V: 23 V: 24 V: 25 V: 26 V: 27 V: 28 V: 29
:p
-
Hi,
innerhalb deiner for()-Schleife, musst du am Schluss noch ein 'free(name);'
einfuegen.mfg
v R
-
Achso tobis, da fällt mir noch ein dass es in C++ new gibt. Warum also der Mist mit dem rumgecaste von malloc?
-
Hi,
mir ist da was aufgefallen und ich hab noch eine Frage...Und zwar:
Ich hab bemerkt, wenn ich das mit dem Attribut binary mache, dann bekomme ich immer die gleiche Ausgabe, also dieses "V: 37889464", weil bei mir nichts in die Datei geschrieben wird!!! (0.0kb grösse!)Wenn das bei Euch so schön geklappt hat, warum wird dann bei mir nichts in die Datei geschrieben?
Lasse ich das Attribut weg, dann wird in die Datei geschrieben, aber ich kann's nicht korrekt lesen (wegen der "26"!).Zufällig einen Rat auf Lager?? (Bitte...*verzweifelt*)
Gruss,
Tobias
-
Hi, es funzt!
Ich verrat auch gleich wie:os.open(filename,ios::binary|ios::out);
- aus irgendwelchen Gründen muss man "out" auch setzen! Obwohl es angeblich implied ist!!!
-
- aus irgendwelchen Gründen muss man "out" auch setzen! Obwohl es angeblich implied ist!!!
Wie kommst du darauf? ios::out ist der Standardwert bei ofsrream. Standardwerte gelten allerdings nur, wenn du an der entsprechenden Stelle keinen explizites Argument angibst. Gibst du z.B. ios::binary explizit an, wird das ios::out nicht mehr verwendet. Wenn du ios::out|ios::binary haben willst, musst du also auch ios::out|ios::binary hinschreiben.
[ Dieser Beitrag wurde am 30.05.2003 um 23:58 Uhr von HumeSikkins editiert. ]
-
oh, danke! wusste ich nicht!