Nadpisywanie wartości w pliku txt

0

jak coś takiego zrobić??
próbowałem coś takiego tylko dla 2 zestawu ale to czyści mi cały plik txt;/
poproszę o jakieś wskazówki;/

case 6:
			{
		
			int i=2;
		
			
			int rozm = rozmiar()-1;
			
			
			student *s = new student [rozm];
			ofstream plik;
			plik.open("c:/baz.txt");
			
			
				s[i].numer = i+1;
				cout<<"Podaj imie :"<<endl;
				cin>>s[i].imie;
				cout<<"Podaj nazwisko :"<<endl;
				cin>>s[i].nazwisko;
				cout<<"Podaj numer indeksu :"<<endl;
				cin>>s[i].nrindeksu;
				cout<<"Podaj rok studiow :"<<endl;
				cin>>s[i].rok;
				cout<<"Podaj kierunek :"<<endl;
				cin>>s[i].kier;
				cout<<"Podaj wydzial :"<<endl;
				cin>>s[i].wydz;
			
		
			
			
				plik<<s[i].numer<<endl;
				plik<<s[i].imie<<endl;
				plik<<s[i].nazwisko<<endl;
				plik<<s[i].nrindeksu<<endl;
				plik<<s[i].rok<<endl;
				plik<<s[i].kier<<endl;
				plik<<s[i].wydz<<endl;
				
			
			plik.close();
			delete [] s;
			break;
		}
0

Nie twórz obiektu ofstream, on ma domyślnie ustawiony bit ios::trunc, stwórz obiekt typu fstream plik("nazwa", ios::in | ios::out), potem wyszukujesz odpowiedniego miejsca przez plik.seekp() i napisujesz miejsce w pliku tak jak już to zrobiłeś wyżej.

0

po zamianie na coś takiego dalej wszystko czyści:/

case 6:
			{
		
			int i=2;
		
			
			int rozm = rozmiar()-1;
			
			
			student *s = new student [rozm];
			fstream plik;
			plik.open("c:/baz.txt", ios::in | ios::out);
			zpliku(s,rozm);
			plik.seekp(2,ios_base::beg);
				s[i].numer = i+1;
				cout<<"Podaj imie :"<<endl;
				cin>>s[i].imie;
				cout<<"Podaj nazwisko :"<<endl;
				cin>>s[i].nazwisko;
				cout<<"Podaj numer indeksu :"<<endl;
				cin>>s[i].nrindeksu;
				cout<<"Podaj rok studiow :"<<endl;
				cin>>s[i].rok;
				cout<<"Podaj kierunek :"<<endl;
				cin>>s[i].kier;
				cout<<"Podaj wydzial :"<<endl;
				cin>>s[i].wydz;
			
		
			
			
				plik<<s[i].numer<<endl;
				plik<<s[i].imie<<endl;
				plik<<s[i].nazwisko<<endl;
				plik<<s[i].nrindeksu<<endl;
				plik<<s[i].rok<<endl;
				plik<<s[i].kier<<endl;
				plik<<s[i].wydz<<endl;
				
		
			plik.close();
			delete [] s;
			break;
		}
0

coś robisz źle, u mnie działa jak należy:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct CStudent
{
	string name;
	string surname;
	int age;
};

int main(void)
{
	string line;
	fstream plik ("zoo.txt", ios::in | ios::out);
	if(!plik.good())
		return 1;

	CStudent unit;
	unit.name = "John";
	unit.surname = "Lajoie";
	unit.age = 24; 
	for(int i = 0; i < 3; ++i)
		plik << unit.name << " " << unit.surname << " " << unit.age << endl;
	
	plik.seekg(0);

	for(int i = 0; i < 1; ++i)
		getline(plik, line);

	plik >> unit.name >> unit.surname >> unit.age;

	unit.name = "Angelina";
	unit.surname = "Jolie";
	unit.age = 32;

	plik.seekp(16);

	plik << unit.name << " " << unit.surname << " " << unit.age << endl;

	getchar();
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1