Problem beim speichern von daten in einer Vorhandenen Datenmenge (fstream)
-
Mit Folgendem Quelltext speichere ich in eine vorhandene Datenmenge um dort vorhandene Daten zu überschreiben was er dem ersten Anschein nach auch macht doch wenn ich genauerhin sehe speichert er nur die Daten die er da rein speichern soll und der Rest ist weg. Ist wahrscheinlich nur ne Kleinigkeit aber ich habe keine Ahnung wonach ich suchen soll.
fstream aenderung; int nn = filesize(1); int d = 15; int e = 30; int f = 20; int g = 4; int h = 70; int i =200; int j = 1; int ges =((3 * f) + (5 * g) + j + d + (3 * e) + h + (2 * i)); nn =(nn / ges)+1; int f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16; int n = StringGrid1->Row; aenderung.open("festelaenge.bin",ios::out|ios::binary); char *puffer = new char[20]; if (Edit1->Text.Length()<21) { puffer = Edit1->Text.c_str(); for (int i=Edit1->Text.Length(); i <= 21; i++) { puffer[i]= char(0); } } f1 = ges * (n-1); aenderung.seekp(f1, ios::beg); aenderung.write(puffer,20*sizeof(char)); puffer = new char[20]; if (Edit2->Text.Length()<21) { puffer = Edit2->Text.c_str(); for (int i=Edit2->Text.Length(); i <= 21; i++) { puffer[i]= char(0); } } f2 = (ges * (n-1))+f; aenderung.seekp(f2, ios::beg); aenderung.write(puffer,20*sizeof(char)); f3 = (ges * (n-1))+(2*f); int pufferint = StrToInt(Edit3->Text); aenderung.seekp(f3, ios::beg); aenderung.write((char*)&pufferint,sizeof(int)); f4 = (ges * (n-1))+(2*f)+g; pufferint = StrToInt(Edit4->Text); aenderung.seekp(f4, ios::beg); aenderung.write((char*)&pufferint,sizeof(int)); f5 = (ges * (n-1))+(2*f)+(2*g); pufferint = StrToInt(Edit5->Text); aenderung.seekp(f5, ios::beg); aenderung.write((char*)&pufferint,sizeof(int)); f6 = (ges * (n-1))+(2*f)+(3*g); pufferint = StrToInt(Edit6->Text); aenderung.seekp(f6, ios::beg); aenderung.write((char*)&pufferint,sizeof(int)); f7 = (ges * (n-1))+(2*f)+(4*g); pufferint = StrToInt(ComboBox1->Text); aenderung.seekp(f7, ios::beg); aenderung.write((char*)&pufferint,sizeof(int)); char *pufferbool = new char[1]; f8 = (ges * (n-1))+(2*f)+(5*g); aenderung.seekp(f8, ios::beg); if (RadioButton1->Checked) { pufferbool="1"; } if (RadioButton2->Checked) { pufferbool="0"; } aenderung.write(pufferbool,1*sizeof(char)); puffer = new char[20]; if (ComboBox2->Text.Length()<21) { puffer = ComboBox2->Text.c_str(); for (int i=ComboBox2->Text.Length(); i <= 21; i++) { puffer[i]= char(0); } } f9 = (ges * (n-1))+(2*f)+(5*g)+j; aenderung.seekp(f9, ios::beg); aenderung.write(puffer,20*sizeof(char)); puffer = new char[15]; if (ComboBox3->Text.Length()<15) { puffer = ComboBox3->Text.c_str(); for (int i=ComboBox3->Text.Length(); i <= 21; i++) { puffer[i]= char(0); } } f10 = (ges * (n-1))+(3*f)+(5*g)+j; aenderung.seekp(f10, ios::beg); aenderung.write(puffer,15*sizeof(char)); puffer = new char[30]; if (Edit7->Text.Length()<31) { puffer = Edit7->Text.c_str(); for (int i=Edit7->Text.Length(); i <= 21; i++) { puffer[i]= char(0); } } f11 = (ges * (n-1))+(3*f)+(5*g)+j+d; aenderung.seekp(f11, ios::beg); aenderung.write(puffer,30*sizeof(char)); puffer = new char[70]; if (Edit8->Text.Length()<71) { puffer = Edit8->Text.c_str(); for (int i=Edit8->Text.Length(); i <= 71; i++) { puffer[i]= char(0); } } f12 = (ges * (n-1))+(3*f)+(5*g)+j+d+e; aenderung.seekp(f12, ios::beg); aenderung.write(puffer,70*sizeof(char)); puffer = new char[30]; if (Edit8->Text.Length()<31) { puffer = Edit8->Text.c_str(); for (int i=Edit8->Text.Length(); i <= 31; i++) { puffer[i]= char(0); } } f13 = (ges * (n-1))+(3*f)+(5*g)+j+d+e+h; aenderung.seekp(f13, ios::beg); aenderung.write(puffer,30*sizeof(char)); puffer = new char[30]; if (Edit9->Text.Length()<31) { puffer = Edit9->Text.c_str(); for (int i=Edit9->Text.Length(); i <= 31; i++) { puffer[i]= char(0); } } f14 = (ges * (n-1))+(3*f)+(5*g)+j+d+h+(2*e); aenderung.seekp(f14, ios::beg); aenderung.write(puffer,30*sizeof(char)); puffer = new char[201]; if (Edit10->Text.Length()<201) { puffer = Edit10->Text.c_str(); for (int i=Edit10->Text.Length(); i <= 31; i++) { puffer[i]= char(0); } } f15 = (ges * (n-1))+(3*f)+(5*g)+j+d+h+(3*e); aenderung.seekp(f15, ios::beg); aenderung.write(puffer,200*sizeof(char)); puffer = new char[201]; if (Edit11->Text.Length()<201) { puffer = Edit11->Text.c_str(); for (int i=Edit11->Text.Length(); i <= 31; i++) { puffer[i]= char(0); } } f16 = (ges * (n-1))+(3*f)+(5*g)+j+d+h+(3*e)+i; aenderung.seekp(f16, ios::beg); aenderung.write(puffer,200*sizeof(char)); aenderung.close(); Button3->Enabled=true; Button2->Enabled=false; lesen(true);
-
Hast Du schonmal den Debugger genutzt?
-
Hallo
Schleifen? Arrays?
Alleine deine Variabennamen- und verteilung macht deutlich das du lieber erst mal die Grundlagen von C++ lernen solltest.bis bald
akari
-
Hm dein Einwurf was die Array und schleifen angeht habe ich nicht ganz verstanden was stört dich denn an denen?
Was die Sache mit dem Debugger angeht so sind die ermittelten Starpositionen in Ordnung nur speichert er halt nur die Daten des geänderten Datensatzes. Es ist quasi als ob er die Datei neu anlegt und nur den einen Datensatz einspeichert.
-
Falls der Komentarmit dem schleifen auf die vielen for schleifen bezogen ist ich benötige diese um die Datenaätze auf eine bestimmte länge zubekommen. Ups naja und die vielen int's die muss ich noch weg machen war halt copy/past.
-
So das Problem lag daran das ich beim öffnen der Datei nur ios::out habe und nicht noch zusätzlich ios::in. Da mit ios::out immer eine neue Datei erstellt wird kann ich ja garkeine vorhandenen Daten in meiner datei finden. Das Thema kann geschlossen werden.