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;
}
Tento program zapíše čísla do souboru data.dat, jen si to vyskoušejte - čísla tam nebudou vůbec vidět (při otevření notepadem) a soubor bude menší, než přes klasickej printf ;-) Zapisovat se nemusí jen pole, nebo čísla, ale umí to zapisovat i struktury (pole struktur) fread int fread(void *pointer, int size, int count, FILE *file); Funkce načte ze souboru binárně nějakou hodnotu o velikosti size a počtu položek count, pokud to je pole, pokud neni count = 1. File je otevřený soubor. Teď příklad :-)

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;
}
Tento program vytiskne čísla, která jste uložili předchozím příkladem do souboru data.txt, taky si to vyskoušejte ! ftell long ftell(FILE *stream); Tahle funkce vám řekne, kde se v otevřeném souboru nacházíte. (Takže na začátku to vrátí nulu a potom počet bajtů od začátku) Jak to použít : fseek int fseek(FILE *stream, long offset, int origin); Tehle funkce zase nastaví pozici v souboru. Offset je číslo, vrácené ftell a origin určuje odkud se bude posouvat : Pokud funkce vrátí nulu, byla úspěšná. Pozor ! Funkce jsou ze stdio.h, nesmíte na něj zapomenout ... Cvičení : 1) - Zapište do souboru data v binárním a textovém módu a čtěte je v binárním a textovém módu (takže budou čtyři výstupy) Výsledky zobrazte jako hex čísla 2) - Máme strukturu :

struct Pokus {
    char a;
    short b;
    short c;
};
Zapište ji v binárním módu do souboru, potom ji znovu binárně přečtěte a zobrazte výsledek jako hex čísla. Zapište ji napřed celou a potom po částech. 3) - Zkuste napsat program, který bude šifrovat soubory. (pomocí xor) Porovnejte výsledky v textovém a binárním módu. Teď umíte asi vše, co je potřeba pro programování v dosu, je ještě potřeba dohnat grafiku, ale jinak vám to stačí. Kdo se chce naučit ještě windows, ať jěště pokračuje. Gratuluji =-) -tHE SWINe-
Zpátky