Problem z operacjami na pliku

0

Mam zrobić program który wczytuje z pliku dane, robi na nich jakieś operacje i wyniki zapisuje do pliku.
Otwieram plik do odczytu i zapisu (fstream) wczytuje dane do tablicy, następnie zmieniam i wyniki zapisuje w tym samym pliku z którego wczytywałem dane. I tu mam problem. **Czy da się zapisać dane do określonego wiersza **?
Wiem jak zapisać dane w pliku od końca, a ja muszę pobrać wartość z pliku zmienić ją i w miejscu poprzedniej wartości zapisać nową.

0

Gdy juz odczytasz dane, oblicz ich dlugosc, a nastepnie cofnij wskaznik pliku o ta dlugosc i dopiero zapisuj. Musisz otworzyc plik w trybie nadpisywania.

cos takiego moze, jesli musza byc strumienie:

	fstream file;
	char *buff;

	file.open(argv[1], fstream::in);

	file.seekg(0, ios::end);
	size_t len = file.tellg();
	file.seekg(0, ios::beg);

	buff = new char[len];
	file.read(buff, len);


	file.close();
	file.open(argv[1], fstream::in | fstream::out | fstream::trunc);

	buff[0] = 'b';
	file.write(buff, len);

	file.close();

        delete [] buff;
0

Mógłbyś podpowiedzieć jak to mam zrobić ?
W C++ dopiero zaczynam pisać.

0

Nie da się wpisać czegoś w pliku do środka. Musisz wczytać wszystkie dane do tablicy, zmienić ciąg, który potrzebujesz i nadpisać stary plik :)

0
Blood napisał(a)

Nie da się wpisać czegoś w pliku do środka.

Da sie jak najbardziej, otwierajac plik za pomoca fopen w trybie r+ ;)

0

No dać się da, ale zdaje się, że i tak będzie musiał wszystkie dane za początkiem wpisywania zapamiętać i potem dodać do pliku po zakończeniu edycji.

0

Nie bedzie musial, sprawdz ten przyklad:

echo "abcdef" > plik

#include <cstdio>

int main(void)
{
   FILE *fp = fopen("./plik", "r+");
   fseek(fp, 2, SEEK_SET);
   fputc('z', fp);
   fclose(fp);

   return 0;
}
0

Aha, no tak. Putować można. Lecz jeżeli będzie chciał coś usunąć i dodać na to miejsce?

0

Jak to co chce dodac bedzie mialo taki sam rozmiar jak miejsce, w ktorym chce to zapisac to po prostu nadpisze, ale jezeli bedzie chcial dodac cos o innym rozmiarze to trzeba kombinowac - mozna zawsze trzymac dane w pliku pogrupowane w bloki o stalym rozmiarze i cale bloki nadpisywac.

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