to get the file

Transkrypt

to get the file
Laboratorium nr 7
Instrukcja
laboratoryjna
7
1)
1/5
Język C
Temat: Operacje na plikach.
Przygotował: mgr inż. Maciej Lasota
Pliki.
Plik (ang. file), jest to nazwany ciąg danych (inaczej zbiór danych), o skończonej
długości, posiadający szereg atrybutów i stanowiący dla systemu operacyjnego całość.
Język C posiada w pliku nagłówkowym <stdio.h> zadeklarowane funkcje służące do obsługi
plików. Funkcje te pozwalają na otwieranie, tworzenie oraz modyfikację różnych plików
zarówno tekstowych (ASCII) jak i też binarnych. Podstawową strukturą opisującą plik (jako
zbiór danych na dysku) jest typ danych FILE tzw. typ plikowy. Za pomocą wskaźnika na
zmienną plikową możemy mieć dostęp do pliku. Deklaracja wskaźnika na taką zmienną jest
następująca:
FILE *plik;
2)
Otwieranie pliku.
Do otworzenia pliku w języku C służy funkcja fopen(). Funkcja ta przyjmuje dwa
parametry. Pierwszym argumentem jest nazwa pliku. Drugim natomiast atrybut, który określa
w jaki sposób ma zostać otworzony plik (atrybuty można ze sobą łączyć). Funkcja zwraca
wskaźnik na zmienną plikową.
[wskaźnik na zmienną plikową] = fopen(”nazwa pliku”,”atrybuty”);
Przykład:
FILE *plik;
plik = fopen(”dane.txt”,”r”);
Nazwa pliku jest to bezpośrednia nazwa podana w cudzysłowach ” ”, lub z podaniem
katalogu. Oprócz bezpośredniej nazwy możemy podać też tablicę znaków (łańcuch)
zawierający ścieżkę do pliku lub samą nazwę pliku. Atrybut określa w jaki sposób ma być
otworzony plik lub też jakiego typu jest to plik.
Laboratorium nr 7
3)
• „r”
- otwórz plik do odczytu,
• „w”
- otwórz plik do zapisu, jeśli plik istniej skasuj poprzednią zawartość,
• „a”
- dopisuj do pliku, ewentualnie utwórz plik z dopisywaniem do końca pliku,
• „r+”
- otwórz plik tekstowy do odczytu i zapisu,
• „w+”
- utwórz plik tekstowy do aktualizacji skasuj plik jeśli istnieje,
• „a+”
- dopisuj do pliku, ewentualnie utwórz plik do aktualizacji,
• „b”
- otwórz plik binarny.
2/5
Odczyt danych z pliku.
W języku C wyróżniamy kilka sposobów służących do odczytu danych z pliku. Dwie
podstawowe funkcje służące do tego celu to fgetc() oraz fgets(). Funkcje te zadeklarowane
są w pliku nagłówkowym <stdio.h>.
fgetc(strumien) – funkcja ta odczytuj pojedynczy znak z pliku i zwraca liczbę
całkowitą (kod ASCII) odpowiadającą danemu znakowi.
fgets(tablica,n,strumien) – funkcja odczytuje co najwyżej (n – 1) znaków z pliku i
wstawia je do podanej tablicy.
Innym sposobem na odczyt danych z pliku, jest wykorzystanie funkcji konwersji
Podobnie jak w przypadku wczytywania danych z klawiatury za pomocą scanf() istnieje
specjalna wersja przystosowana do wczytywania danych z pliku. Funkcją tą jest fscanf()
zadeklarowana jest ona w pliku nagłówkowym <stdio.h>.
int fscanf(FILE *strumien, const char *format, ...);
Przykład:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *plik;
int c;
Laboratorium nr 7
3/5
if(argc != 2)
{
printf("Blad podaj nazwe pliku !!!\n");
exit(1);
}
plik = fopen(argv[1],"r");
printf("Odczytuje zawartosc pliku: %s\n\n",argv[1]);
if(plik == NULL)
{
printf("Blad otwarcia pliku ...\n");
exit(1);
}
while((c=fgetc(plik)) != EOF)
{
printf("%c",c);
}
printf("\n");
fclose(plik);
return (0);
}
4)
Zapis danych do pliku.
Również w przypadku zapisu danych do pliku, wyróżniamy kilka rodzajów funkcji
służących do tego celu.
fputc(c,strumien) – funkcja ta zapisuje pojedynczy znak „c” do pliku.
fputs(tablica,strumien) – funkcja ta zapisuje tekst zawarty w tablicy do pliku.
Podobnie do funkcji printf() istniej również funkcja konwersji służąca do zapisu
danych do pliku, jest nią funkcja fprintf().
int fprintf(FILE *strumien, const char *format, ...);
Pierwszym argumentem funkcji fprintf() jest wskaźnik na zmienną plikową, drugim
tekst formatujący czyli stała znakowa. Znak procenta oznacza rozpoczęcie tzw.
specyfikatora formatu. Specyfikator formatu pozwala na wprowadzenie w jego miejsce
wartości kolejnych argumentów funkcji printf() (wyjątek stanowi %%, który umożliwia
wprowadzenie znaku „%”). Znak „\” w tekście formatującym umożliwia wprowadzenie tzw.
znaków specjalnych.
Laboratorium nr 7
Przykład:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *plik;
int c;
if(argc != 2)
{
printf("Blad podaj nazwe pliku !!!\n");
exit(1);
}
if((plik = fopen(argv[1],"a")) == NULL)
{
printf("Blad otwarcia pliku ...\n");
exit(1);
}
printf("Zapisuje do pliku: %s\n\n",argv[1]);
while((c=getchar()) != '#')
{
fputc((int)c,plik);
}
fclose(plik);
return (0);
}
Przykład:
#include <stdio.h>
#include <stdlib.h>
#define MAX 255
int main(int argc, char *argv[])
{
FILE *plik;
char linia[MAX];
int c,i;
if(argc != 2)
{
printf("Blad podaj nazwe pliku !!!\n");
exit(1);
}
4/5
Laboratorium nr 7
5/5
if((plik = fopen(argv[1],"a")) == NULL)
{
printf("Blad otwarcia pliku ...\n");
exit(1);
}
while(gets(linia) != NULL && linia[0] != '\0')
{
fprintf(plik,"%s\n",linia);
}
fclose(plik);
return (0);
}
5)
Zamknięcie pliku.
Ważnym elementem w przypadku obsługi plików jest każdorazowe zamknięcie pliku
po wykonaniu na nim operacji (zapisu lub odczytu). Do tego celu służy funkcja fclose().
Funkcja ta przyjmuje jeden parametr jest nim wskaźnik na zmienną plikową.
fclose(FILE *strumien);
Przykład:
FILE *plik;
plik = fopen(”test.txt”,”r”);
...
...
...
fclose(plik);