Pliki w C

Dobry opis jest na http://pl.wikibooks.org/wiki/C/Czytanie_i_pisanie_do_plik%C3%B3w , więc ja nie będę się rozpisywał.

Aby dostać wskaźnik na komórkę pamięci odpowiedzialną za dany plik wystarczy użyć:

FILE *fp;
fp=fopen("test.txt", "w");
//jakies operacje na danych
fclose (fp);

Funkcja fopen() może przybierać różne parametry, w zależność od tego co chcemy zrobić z plikiem:

"r" - otwiera plik do czytania

"r+" - otwiera plik do czytania i nadpisywania (aktualizacja)

"w" - otwiera plik do nadpisywania (zamazuje starą treść)

"w+" - otwiera plik do nadpisywania i czytania

"a" - otwiera plik do dopisywania (jeśli plik nie istnieje, to jest tworzony)

"a+" - otwiera plik do dopisywania i odczytu (jeśli plik nie istnieje, to jest tworzony)

"t" - otwiera plik w trybie tekstowym

"b" - otwiera plik w trybie binarnym

Ważną sprawą jest używanie odpowiednich ścieżek do pliku.

Znak:

./ oznacza bieżący katalog.
../ oznacza katalog nadrzędny.
/ oznacza katalog root.

Czyli najprostszy program, który ma za zadanie utworzyć plik ( jeśli go nie ma) i zapisać w nim Hello Wordl wygląda tak:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
 FILE *fp; /* używamy metody wysokopoziomowej - musimy mieć zatem identyfikator pliku, uwaga na gwiazdkę! */
 char tekst[] = "Hello world";
 fp=fopen("test.txt", "w");
 fprintf (fp, "%s", tekst); /* zapisz nasz łańcuch w pliku */
 fclose (fp); /* zamknij plik */
 return 0;
}

Analogicznie można stworzyć odczyt z pliku znak po znaku:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
char znak;
fp=fopen("./test.txt","r");
if(fp==NULL)
 printf("plik jest pusty, lub nie istnieje");
while(znak!=EOF)
{
 znak=fgetc(fp); // czytanie z pliku
  printf("%c",znak);
}
fclose(fp);
return 0;
}

lub stworzyć program na odczyt pliku wiersz po wierszu (30 pierwszych znaków wiersza):

#include <stdio.h>
main()
{
 char znak[30];
 FILE *fp;
 
 fp=fopen("./test.txt","r");
 fgets(znak,30,fp); //czytanie 30 znaków z pierwszego wiersza.
 printf("%s",znak); //wyswietlanie pierwszego wiersza na konsole
 
 fgets(znak,30,fp); //czytanie 30 znaków z drugiego wiersza.
 printf("%s",znak); //wyswietlanie drugiego wiersza na konsole 
 fclose(fp);
return 0;
}