BasicC/Czytanie i pisanie do plików

Z Wikibooks, biblioteki wolnych podręczników.

Z założenia BasicC obsługuje jednocześnie tylko jeden otwarty plik przypisany do zmiennej BASFILE typu FILE* zadeklarowanej w Basic.h. Ograniczenie to można obejść stosując komendy C lub kopiując wskaźniki innych plików do zmiennej BASFILE i odwrotnie. Większość operacji wymaga wcześniejszego otwarcia pliku komendą Open, po zakończeniu operacji należy zamknąć plik komendą Close. Odczyt następuje od aktualnej pozycji "kursora" pliku. Operacje na pliku domyślnie odbywają się za pośrednictwem bufora. Wymagana jest biblioteka stdio.h domyślnie załączana w Basic.h

BGet(b,n)[edytuj]

Odczytuje maksymalnie n bajtów z otwartego pliku i zapisuje w pamięci wskazywanej przez n - może to być np. zmienna łańcuchowa. W miejsce n można podać Lof, jeśli chcemy odczytać wszystkie bajty pliku. Uwaga na możliwość przekroczenia zakresu pamięci ! Wywołuje fread(b,1,n,BASFILE);

BLoad(F,b,n)[edytuj]

Podobnie jak Bget, tylko najpierw otwiera plik o nazwie F do odczytu, a na końcu go zamyka. Wykonuje {BASFILE=fopen(F,"rb");fread(b,1,n,BASFILE);fclose(BASFILE);}

BLoadPak(F,B)[edytuj]

Jak BLoad, ale odczytuje cały plik skompresowany komendą BSavePak. Uwaga - trzeba znać wielkość danych po dekompresji i przygotować odpowiednio duży bufor B.

BPut(b,n)[edytuj]

Kopiuje do pliku maksymalnie n bajtów z pamięci wskazywanej przez b. Wywołuje fwrite(b,1,n,BASFILE);

BSave(F,b,n)[edytuj]

Podobnie jak Bput, tylko najpierw otwiera plik o nazwie F do zapisu, a na końcu go zamyka. Wykonuje {BASFILE=fopen(F,"wb");fwrite(b,1,n,BASFILE);fclose(BASFILE);}

BSavePak(F,B,n)[edytuj]

Jak BSave, ale dane zostają skompresowane.

Close[edytuj]

Zamyka plik przypisany do BASFILE, aktualizuje wprowadzone w nim zmiany. Wywołuje fclose(BASFILE);

Eof[edytuj]

Sprawdza, czy ustawiony jest znacznik osiągnięcia końca pliku, zwraca wartość różną od 0 jeśli tak. Znacznik jest ustawiany np. po próbie odczytu gdy "kursor" osiągnął koniec pliku. Nie mylić z EOF, która jest ujemną stałą zwracaną przez niektóre operacje, gdy osiągnięty został koniec pliku. Wywołuje feof(BASFILE)

FInput$(S)[edytuj]

Odczytuje linię tekstu z pliku i kopiuje do zmiennej łańcuchowej S wraz ze znakiem końca linii, jeśli występuje. Nie więcej niż STRLEN-1 znaków. Wywołuje fgets(S,STRLEN,BASFILE);

Flush[edytuj]

Zapisuje do pliku wprowadzane na nim zmiany zapamiętane w buforze. Wywołuje fflush(BASFILE);

FPrint(T)[edytuj]

Zapisuje w pliku liczbę T w postaci tekstowej. Wywołuje fprintf(BASFILE,"%.12lg",(double)T);

FPrint$(T)[edytuj]

Zapisuje w pliku tekst T. Wywołuje fputs(T,BASFILE);

Inp[edytuj]

Zwraca odczytany z pliku znak (bajt) (lub EOF, gdy osiągnięty jest koniec pliku lub wystąpi błąd). Wywołuje fgetc(BASFILE)

Kill(P)[edytuj]

Usuwa plik o nazwie P. Wywołuje remove(P);

Loc[edytuj]

Zwraca pozycję "kursora" pliku. Wywołuje ftell(BASFILE)

Lof[edytuj]

Podaje długość pliku. Może to nie być prawidłowa liczba w bajtach, jeśli plik został otwarty jako tekstowy. Wywołuje funkcję SIZEFILE(BASFILE) zdefiniowaną w Basic.h, która może być używana też dla innych niż BASFILE plików.

Open(P,M)[edytuj]

Otwiera plik o nazwie P w trybie M i przypisuje do strumienia wskazywanego przez BASFILE, w przypadku niepowodzenia BASFILE wskazuje na NULL. Wywołuje BASFILE=fopen(P,"M");

Oznaczenia trybów (nie używa się cudzysłowu)
r Do odczytu. Plik musi istnieć.
w Do zapisu. Tworzy pusty plik, jeśli plik już istnieje - jego zawartość jest kasowana.
a Dopisywanie. Operacje wyjściowe zapisują dane na końcu pliku bez względu na komendy zmiany położenia kursora. Plik jest tworzony, jeśli nie istnieje.

Dopisanie b oznacza tryb binarny pliku zamiast domyślnego tekstowego. Dopisanie + oznacza, że możliwy jest zapis i odczyt. Więcej informacji w dokumentacji C.

Out(c)[edytuj]

Zapisuje znak (bajt) c do pliku. Wywołuje fputc(c,BASFILE);

RelSeek(D)[edytuj]

Przesuwa "kursor" pliku o D pozycji. Wywołuje fseek(BASFILE,D,SEEK_CUR);

Rename(S,D)[edytuj]

Zmienia nazwę pliku lub katalogu S na D, lub przenosi plik. Wywołuje rename(S,D);

Seek(D)[edytuj]

Przesuwa "kursor" pliku na pozycję D. Wywołuje fseek(BASFILE,D,SEEK_SET);

SeekEnd(D)[edytuj]

Przesuwa "kursor" na D pozycję od końca pliku. fseek(BASFILE,D,SEEK_END);

Przykład:

#include "Basic.h"
MAIN
  FILE* plik;
  Input$(imie,STRING$)
  Input(wiek,VALUE)
  BSave("test.txt",STRING$,Len(STRING$))
  BLoad("test.txt",STRING$,Lof)
  Print$ STRING$ NL
  Open("test.txt",a+)
  FPrint$(" wiek")
  Seek(0)
  FInput$(STRING$)
  Print$ STRING$ NL
  plik=BASFILE;
  Open("test.2",w+)
  Out(0)
  FPrint(VALUE)
  Seek(0)
  Print Inp NL
  FInput$(STRING$)
  Print$ STRING$ NL
  Close	// zamkniecie pliku "test.2"
  BASFILE=plik;
  Close	// zamkniecie pliku "test.txt"
ENDMAIN

Uwaga - powyższy przykład używa zmiennych pomocniczych BasicC STRING$ i VALUE, jest to niezalecane, bo niektóre komendy zmieniają ich wartość.