Elementy tablicy do pliku binarnego

Elementy tablicy do pliku binarnego
LI
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:22
0

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

Kopiuj
	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?

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:9 dni
0

A otworzyć plik i zajrzeć to nielaska?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
LI
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:22
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ć.

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:9 dni
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]);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
LI
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:22
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() ?

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:9 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
DR
  • Rejestracja:prawie 16 lat
  • Ostatnio:około rok
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):
Kopiuj
for (i = 0; i < SIZE; ++i)
{
    fwrite(&tab[i], sizeof(float), 1, fp);
}

Albo w jednej linii:

Kopiuj
fwrite(tab, sizeof(float), SIZE, fp);
  1. Zmiana elementu o podanym indeksie:
Kopiuj
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.

edytowany 1x, ostatnio: DRK

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.