probleme beim Dateien schreiben
-
so, ich hab mich jetzt mal rangetraut, ein etwas komplexeres programm zum thema datenströme zu schreiben:
Erstmal wird eine Datei geöffnet.
Danach wird die Anazhl jeder einzelnen der möglichen 8Bit kombinationen
(also von 00000000 bis 11111111) gezählt, und dann mit der größe der Datei zusammen in einen Header geschrieben.
danach wird der Header gefolgt vom eigentlichen Dateiinhalt in die Zieldatei geschrieben.
zum schluss folgt ein test, ob der Header richtig geschrieben wurde.
leider funktioniert das programm nicht richtig,der inhalt der zieldatei lautet:
"abcdefghijklmnopqrstuvwxyz"
wenn ich das programm starte, und die neue Datei dann öffne, kommt der korrekte wert raus(erst die größe der ursprungsdatei(also 26)dann viele nullen und 26 einsen, und zum schluss der inhalt der datei.
in der console wird mir aber ein absoluter wust angegeben...
hier der Code:#include <iostream> #include <fstream> using namespace std; struct header{ unsigned long size; int zeichen[511]; }; int main(int argc, char* argv[]) { char Sourcefile[256]; char Compressedfile[256]; header Header; for(int x=0;x<511;x++){ Header.zeichen[x]=0; } cin>>Sourcefile; cin>>Compressedfile; std::ifstream sourcefile(Sourcefile,ios::binary); std::ofstream compressedfile(Compressedfile,ios::binary|ios::ate); if(sourcefile&&compressedfile){ char Buffer; sourcefile.seekg(0,ios::end); //größe ermitteln Header.size=sourcefile.tellg(); sourcefile.seekg(0,ios::beg); //Anazhl der einzelnen Zeichen ermitteln for(unsigned int i=0;i<Header.size;i++){ sourcefile.read(&Buffer,sizeof(char)); Header.zeichen[Buffer]+=1; } //Header schreiben compressedfile<<Header.size; for(int i=0;i<511;i++){ compressedfile<<Header.zeichen[i]; } sourcefile.seekg(0,ios::beg); //die Datei selber reinschreiben for(unsigned int i=0;i<Header.size;i++){ sourcefile.read(&Buffer,sizeof(char)); compressedfile<<Buffer; } sourcefile.close(); compressedfile.close(); //der test FILE* File = fopen(Compressedfile, "r"); fread(&Header, 1, sizeof(header),File); cout<<Header.size; for(int i=0;i<511;i++){ cout<<Header.zeichen[i]; } cin>>Sourcefile; } return 0; }
weis jemand, wo der Fehler liegt?
-
Bei Asky hast du auch GROß und klein und steuerzeichen z.b. 7 ist glaube ich ein Warn pipen, also was ist dein Problem? Du musst an der Richtigen stelle Anfangen...
schreib dir ne Ausgabe der Asky-zeichen
Füll dir ein array mit alle charsfor(int a=0;a<255; a++)
cout....
...
-
ich hab 18 errors mach die weg und dann debug...
-
du hast 18 errors,weil du mit vc++ arbeitest, nicht mit bcb.
und der sinn der sache ist, dass ich alle möglichen 8bit combinationen speichern kann,ich geb ja auch nicht die ascii codes selber aus, sondern nur ihre anzahl!
Der Sinn der Sache soll sein, dass ich später die Datei nach HUFFMANN komprimiere,und dazu muss ich erstmal rausbekommen, wie oft die einzelnen Kombinationen vorkommen.
-
hmm es klappt...lag scheinbar an folgender zeile:
fread(&Header, 1, sizeof(header),File);
ich hab sie so umgeändert:
fread(&Header,sizeof(int), sizeof(header),File);
ich weis zwar nicht,was nun genau die fehlerursache war(da ich die erste zeile so wie sie ist aus einem tutorial über genau dieses thema,welches nur nen anders aufgebauten header hat,hab),mir ist nun nur schleierhaft, wieso 1 welches ja eigentlich die kleinste einheit sein sollte nen fehler ausgelöst hat...