Probleme beim Lesen mit read und write
-
Hey @all,
und zwar habe ich das Problem wenn ich jetzte folgende Datei schreibe
<TAG><SIZE><VALUE> also in etwas so NAME§irgendetwasVNAM(nochmalirgendetwas
wie kann ich diese mit read lesen?
Denn folgendes liefert bei mir nur falsche Ausgaben:fstream file("test.dat", ios::binary | ios::in); char tag[4] = {'\0'}; char size[1] = {'\0'}; file.read(tag, 4); file.read(size, 1); int isize; stringstream s; s << size; s >> isize; char* text = new char[isize+1]; file.read(text, isize);
Lg _freeze_
-
Was für eine Ausgabe bekommst du den?
Du liest aber soviel Daten ein, dass damit der komplette buffer gefüllt ist, damit fehlt ein \0 am Stringende
-
salut,
hab ein kleines Problem, und zwar verstehe ich nicht wieso bei diesem Programm, nur die ersten 4 Zeichen kopiert werden und nicht das ganze file....
#include <iostream> #include <ctime> #include <stdio.h> #include <stdlib.h> #define BUFFER_SIZE 8192 void usage(char * name); //Initialisiere Funktion void start_clock(clock_t & time);//Initialisierung void print_time_used(clock_t time);//Initialisierung bool GetThreadTimes( ); int main(int argc, char * argv[]) { system("cls"); char antwort; FILE *ausgabe,*eingabe; int n=0; char buffer[BUFFER_SIZE]; clock_t time=0; //Zeit auf 0 gesetzt std::cout << "******************************************\n" <<std::endl; if(argc != 3) usage(argv[0]); //überprüfe ob Parameterzahl ungleich 3 ist if((eingabe = fopen(argv[1], "r")) == (FILE *) NULL)//überprüfe Parameter 1 (Eingabedatei) { std::cout <<"Eingabedatei existiert nicht!"<<std::endl; exit(-1); } if((ausgabe = fopen(argv[2],"r")) != (FILE *) NULL)//Überprüfe ob Ausgabedatei geöffnet werden kann { std::cout <<"Die Ausgabedatei existiert schon!\nSoll sie trotzdem ueberschrieben werden? (j/n) " << std::endl; std::cin >>antwort; fclose(ausgabe); //schliesse die Ausgabedatei if((antwort != 'j')&&(antwort != 'J'))//überprüfe ob Eingabe ungleich j/J ist... { std::cout << "\nKopiervorgang unterbrochen." <<std::endl; exit(-1); } else { ausgabe=fopen(argv[2], "w"); } } if((ausgabe = fopen(argv[2],"w")) == (FILE *) NULL)//Öffne Datei zum schreiben... { std::cout << "Outputfile kann nicht geschrieben werden." << std::endl; usage(argv[0]); } else { start_clock(time); n=fread(buffer, 1, sizeof(BUFFER_SIZE), eingabe); //std::cout << n; std::cout <<buffer; if(buffer==NULL) { std::cout <<"kein Speicher vorhanden"<<std::endl; } else { do { std::cout <<n; fwrite(buffer, 1, n, ausgabe);//fwrite(buffer, 1, n, ausgabe); n--; }while(n>NULL); fclose(ausgabe);//Schliesse die Ausgabedatei fclose(eingabe);//Schliesse die Eingabedatei } } std::cout <<"\nKopie wurde erstellt!" << std::endl; printf("%d ", sizeof(buffer)); print_time_used(time); return EXIT_SUCCESS; } void usage(char *name)//Ausgabe, falls Parameterübergabe falsch oder nicht vollständig eingegeben wurde { std::cout << "Parameter Fehler!" << std::endl; exit(8); } void start_clock(clock_t &time)//start_clock Funktion, initialisiert die Zeit { time= clock(); if(time==clock_t(-1)) { std::cerr << "sorry, no clock"; exit(1); } return; } void print_time_used(clock_t time)//print_time_used, zeigt die Differenz zwischen startzeit + endzeit { clock_t time2 = clock(); if(time2 == clock_t(-1)) { std::cerr <<"sorry, clock overflow"; exit(2); } std::cout << "\nKopierdauer: " << 10000*double(time2-time)/CLOCKS_PER_SEC <<" Millisekunden" <<std::endl; return; }
hoffe ihr könnt mir weiterhelfen...
mfg
beatrice