BasicC/Czytanie i pisanie do plikó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.

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

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);

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);

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);

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

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ść.