Pliki niezdefiniowane (tzn. o elementach niezdefiniowanego typu) stanowią niskopoziomowy kanał dostępu bezpośredniego do zbiorów dyskowych, niezależny od typu informacji zapisanej w pliku.
Deklaracja zmiennej plikowej niezdefiniowanego typu:
var F: File;
Do otwierania pliku niezdefiniowanego służą procedury standardowe Reset i Rewrite, które w odróżnieniu od plików tekstowych i zdefiniowanych, poza zmienną plikową, mogą mieć dodatkowy drugi parametr. Specyfikuje on rozmiar rekordu zapisu/odczytu stosowanego w jednorazowej operacji odczytu lub zapisu. W przypadku pominięcia drugiego parametru, przyjmowana jest wartość domyślna: 128.
Rewrite(F); //jest równoważne Rewrite(F,128); ... Reset(F); //jest równoważne Reset(F,128);
Jedynie jednobajtowy rozmiar rekordu gwarantuje bezbłędność operacji I/O niezależnie od rodzaju i rozmiaru pliku.
Rewrite(F,1); ... Reset(F,1);
Do zapisu i odczytu w plikach niezdefiniowanych służy specjalna para procedur standardowych: BlockRead i BlockWrite. Używa się tych procedur wyłącznie w odniesieniu do plików niezdefiniowanych.
procedure BlockWrite(var F: File; var Buf; Count: Integer [; var NumRec:Integer]); procedure BlockRead(var F: File; var Buf; Count: Integer [; var NumRec: Integer]);
gdzie: Buf - zmienna stanowiąca bufor odczytu/zapisu
Count - liczba zlecanych odczytów/zapisów
NumeRec - liczba wykonanych przez procedurę odczytów/zapisów.
Przykład:
var FromF, ToF: File; NumRead, NumWritten: Integer; Buf: array[1..2048] of Char; begin if OpenDialog1.Execute then //Wyświetla OpenDialog begin AssignFile(FromF, OpenDialog1.FileName); Reset(FromF, 1); //wielkość rekordu = 1B if SaveDialog1.Execute then //Wyświetla SaveDialog begin AssignFile(ToF, SaveDialog1.FileName); Rewrite(ToF, 1); //wielkość rekordu = 1B repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); CloseFile(FromF); CloseFile(ToF); end; end; end;
Funkcja SizeOf - zwraca rozmiar parametru w bajtach, parametrem może być też identyfikator typu.