Elementy tablicy do pliku binarnego

0

Witam, chcę zapisać elementy tablicy do pliku binarnego. Robię to w ten sposób

	fp = fopen("dane.dat","wb");
	if(fp==NULL)
	{
		printf("Blad otwarcia pliku %s\n", plik);
		exit(-1);
	}
	for(i=0;i<SIZE;i++)
		fprintf(fp,"%d, %f\n",i,tab[i]);

Czy to jest dobrze?

0

A otworzyć plik i zajrzeć to nielaska?

0

No właśnie zapisuję też te dane do pliku tekstowego i jedyna różnica jest taka, że w tym pliku binarnym wszystko jest w jednej linii. Nie wiem czy tak ma być.

1

Jedno z dwóch:

  1. fp = fopen("dane.dat","wb"); ... fprintf(fp,"%d, %f\r\n",i,tab[i]);
  2. fp = fopen("dane.dat","w"); ... fprintf(fp,"%d, %f\n",i,tab[i]);
0

Dobra, mam to zrobione ale teraz mam kolejny problem. Chcę teraz otworzyć ten plik i nadać elementowi o indeksie 4 jakąś inną wartość. Jak to zrobić wykorzystując funkcję fseek() ?

0

Zapisywać masz w trybie binarnym ("wb") za pomocą funkcji fwrite zaś czytać fread

0
  1. Jeśli pisząc o plik binarnym masz na myśli dane w postaci binarnej, to do zapisu powinieneś użyć funkcji fwrite, a nie fprintf, która zapisuje dane w postaci jawnej.
  2. Elementy tablicy mają kolejne indeksy, zaczynając od 0, więc nie trzeba dodatkowo zapisywać wartości tych indeksów, wystarczy kolejno zapisywać wartości elementów tablicy (serializacja):
for (i = 0; i < SIZE; ++i)
{
    fwrite(&tab[i], sizeof(float), 1, fp);
}

Albo w jednej linii:

fwrite(tab, sizeof(float), SIZE, fp);
  1. Zmiana elementu o podanym indeksie:
int indeks = 4;
float nowa_wartosc = 1.23;
fseek(fp, indeks * sizeof(float), SEEK_SET);
fwrite(&nowa_wartosc, sizeof(float), 1, fp);

Zakładając, że elementy tablicy są typu float.
Oczywiście to najkrótszy sposób, dodatkowo można/należy zrobić obsługę błędów.

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