prawie offtopic, odpowiem ci w C a nie C++, moze ktos przetlumaczy moj post ;>
ew uzyj polecen tych do obslugi plikow w C++, ja tak robilem, imho sa wygodniejsze ;>
-
nie hexa, tylko binarnie ;> (chyba ze nie zalapalem o co ci chodzi)
-
tak naprawde roznica jest tylko w zakonczeniu linii miedzy tymi dwoma trybami, to jest:
tekstowy spodziewa sie ujrzec \r\n, i robi z tego podczas odczytu \n (tj do bufora \r nie dociera)
binarny natomiast wrzuca i \r do buforka
ofc ta roznica dotyczy tylko polecen umozliwiajacych zapis/odczyt danych tekstowo, na reszte CHYBA nie wplywa
OFC pod linuxem nie ma \r\n, jest \n, wiec NIE MA roznicy miedzy trybem binarnym a tekstowym, wiec mozna pisac i fopen( "asdf", "rb" ) jak i fopen( "asdf", "r" )... ofc na windzie jest roznica, wiec jest to jeden z najczesciej szukanych/robionych bugow przy portowaniu programow z linuxa na winde ;p
-
przyklady
zalozmy ze mamy
int asdf[ ] = { 12, 13, 54, 23, 67, 12 },
sasdf = sizeof( asdf ) / sizeof( int );
(zapis odbywa sie w formacie: najpierw ilosc elementow, potem elementy)
k.. przykladowy zapis danych tekstowo:
int main( void )
{
FILE *f; int i;
f = fopen( "asdf.txt", "w" );
fprintf( f, "%i\\n", sasdf );
for( i = 0; i < sasdf; i++ ) fprintf( f, "%i\\n", asdf[ i ] );
fclose( f );
return 0;
}
teraz odczyt
int main(void )
{
FILE *f; int i;
f = fopen( "asdf.txt", "r" );
fscanf( f, "%i\\n", &sasdf );
for( i = 0; i < sasdf; i++ ) fscanf( f, "%i\\n", &asdf[ i ] );
fclose( f );
return 0;
}
a teraz binarnie, najpierw zapis
int main( void )
{
FILE *f;
f = fopen( "asdf.bin", "wb" );
fwrite( &sasdf, sizeof( int ), 1, f );
fwrite( asdf, sizeof( int ), sasdf, f );
fclose( f );
return 0;
}
i odczyt
int main( void )
{
FILE *f;
f = fopen( "asdf.bin", "rb" );
fread( &sasdf, sizeof( int ), 1, f );
fread( asdf, sizeof( int ), sasdf, f );
fclose( f );
return 0;
}
podsumowujac:
do zapisu/odczytu tekstowego uzywa sie:
fprintf( plik, "format", zmienne, zmienne.... );
fputs( "tekkst", plik );
fscanf( plik, "format", adres_zminnej, adres_zmiennej... );
fgets( buffor, wielkosc, plik );
i jeszcze fputc/fgetc
a do binarnych
fwrite( adres_rzeczy_do_zapisania, wielkosc_jednego_elementu, ilosc_elementow, plik );
fread( paramatry identyczne jak wyzej ;>)
do otarcia pliku sluzy fopen, do zamkniecia fclose
poza tym jeszcze zobacz sobie w manie/helpie fseek, ftell etc ;>