Tak, dáme si ještě pár funkcí pro zlepšení práce se souborem. Napřed textové : fgets Funkce fgets slouží k načtení jedné řádkz ze souboru. Má omezenou (omezitelnou) délku řádky. char *fgets(char *str, int max_delka, FILE *file); Funkce vrací NULL, pokud je na konci souboru. Použitá je třeba v cheateru. Buffer str musí být nalokovaný na delku minimálně max_delka + 1 (ještě ukončovací nula) Pokud vrátí NULL, je na konci souboru. Jinak vrací str. Znaky '\n' nebo EOF jsou do str uloženy taky. fputs Funkce fputs zapíše řádku do souboru (už musí obsahovat '\n') : char *fputs(char *str, FILE *file); Vrací NULL v případě neúspěchu (plný disk), jinak zase str. Tak. Teď by měly přijít ty binární, ale ještě pořád nevíme jaký je rozdíl mezi binárním a textovým přístupem k souboru. Textový soubor nemůže obsahovat určité hodnoty (EOF) a za určité hodnoty ('\n') systém automaticky doplní další a potom při čtení je zase požere. Zato binární soubor obsahuje přesně to, co se do něj zapíše a přesně to se znovu přečte. V binárním módu se ukládají třeba obrázky, různá data.. co obsahují i jiné znaky než text. Tak, a teď ty funkce : fwrite Tahle funkce zapíše do souboru binárně nějakou hodnotu (pole hodnot). int fwrite(void *pointer, int size, int count, FILE *file); Vrací počet zapsaných bajtů. Příklad :
int main() { FILE *fw; int i[5]; fw = fopen("data.txt", "wb"); // otevři pro !binární! zápis scanf("%d %d %d %d %d", i[0], i[1], i[2], i[3], i[4]); // načte čísla z klávesnice fwrite(i, sizeof(i), 1, fw); printf("Do souboru data.txt bylo ulozeno : %d %d %d %d %d", i[0], i[1], i[2], i[3], i[4]); fclose(fw); return 1; } |
int main() { FILE *fr; int i[5]; fr = fopen("data.txt", "rb"); // otevři pro !binární! čtení fread(i, sizeof(i), 1, fr); printf("V souboru data.txt bylo : %d %d %d %d %d", i[0], i[1], i[2], i[3], i[4]); fclose(fr); return 1; } |
struct Pokus { char a; short b; short c; }; |