Wystarczy umieścić plik sekwencja binarna pewnego rodzaju. W Delfyistnieją trzy klasy plik: wpisane, tekstowe i bez typu. Typowane pliki to pliki zawierające dane określonego typu, takie jak Double, Integer lub wcześniej zdefiniowany niestandardowy typ rekordu. Pliki tekstowe zawierają czytelne znaki ASCII. Pliki bez typów są używane, gdy chcemy narzucić możliwie najmniejszą strukturę pliku.
Wpisane pliki
Podczas gdy pliki tekstowe składają się z linii zakończonych CR / LF (#13#10) kombinacja, pliki typowane składają się z danych pobranych z określonego typu struktury danych.
Na przykład poniższa deklaracja tworzy typ rekordu o nazwie TMember i tablicę zmiennych rekordu TMember.
rodzaj
TMember = rekord
Nazwa: strunowy[50];
e-mail:
strunowy[30];
Posty: LongInt;
koniec;
var Członkowie: szyk[1..50] z TMember;
Zanim będziemy mogli zapisać informacje na dysku, musimy zadeklarować zmienną typu pliku. Poniższy wiersz kodu deklaruje zmienną pliku F.
var FA: plik TMember;
Uwaga: Aby utworzyć plik tekstowy w Delphi, używamy następujących składnia:
var SomeTypedFile: plik SomeType
Typem podstawowym (SomeType) dla pliku może być typ skalarny (jak Double), typ tablicowy lub typ rekordu. Nie powinien to być długi ciąg, dynamiczna tablica, klasa, obiekt ani wskaźnik.
Aby rozpocząć pracę z plikami z Delphi, musimy połączyć plik na dysku ze zmienną pliku w naszym programie. Aby utworzyć ten link, musimy użyć AssignFile procedura kojarzenia pliku na dysku ze zmienną pliku.
AssignFile (F, „Members.dat”)
Po ustanowieniu powiązania z plikiem zewnętrznym zmienna pliku F musi zostać „otwarta”, aby przygotować ją do odczytu i zapisu. Wywołujemy procedurę resetowania, aby otworzyć istniejący plik lub przepisz, aby utworzyć nowy plik. Po zakończeniu przetwarzania pliku program musi zostać zamknięty za pomocą procedury CloseFile. Po zamknięciu pliku jego powiązany plik zewnętrzny jest aktualizowany. Zmienna pliku może być następnie powiązana z innym plikiem zewnętrznym.
Ogólnie rzecz biorąc, powinniśmy zawsze używać Obsługa wyjątków; podczas pracy z plikami może pojawić się wiele błędów. Na przykład: jeśli wywołamy CloseFile dla pliku, który jest już zamknięty, Delphi zgłasza błąd we / wy. Z drugiej strony, jeśli spróbujemy zamknąć plik, ale nie wywołaliśmy jeszcze AssignFile, wyniki są nieprzewidywalne.
Napisz do pliku
Załóżmy, że wypełniliśmy tablicę członków Delphi ich nazwiskami, e-mailami i liczbą postów i chcemy przechowywać te informacje w pliku na dysku. Następujący fragment kodu wykona pracę:
var
FA: plik TMember;
i: liczba całkowita;
zaczynać
AssignFile (F, „Members.dat”);
Przepisz (F);
próbować
dla j: = 1 do 50 robić
Pisz (F, Członkowie [j]);
Wreszcie
CloseFile (F);
koniec;koniec;
Odczyt z pliku
Aby pobrać wszystkie informacje z pliku „Members.dat”, skorzystalibyśmy z poniższych kod:
var
Członek: TMember
FA: plik TMember;zaczynać
AssignFile (F, „Members.dat”);
Reset (F);
próbować
podczas gdy nie Eof (F) zaczynać
Przeczytaj (F, członek);
{DoSomethingWithMember;}
koniec;
Wreszcie
CloseFile (F);
koniec;koniec;
Uwaga: Eof to funkcja sprawdzająca EndOfFile. Używamy tej funkcji, aby upewnić się, że nie próbujemy czytać poza końcem pliku (poza ostatnim zapisanym rekordem).
Poszukiwanie i pozycjonowanie
Pliki są zazwyczaj dostępne sekwencyjnie. Kiedy plik jest odczytywany przy użyciu standardowej procedury Odczyt lub zapis przy użyciu standardowej procedury Zapis, bieżąca pozycja pliku przechodzi do następnego uporządkowanego numerycznie komponentu pliku (następny rekord). Dostęp do typowanych plików można również uzyskać losowo za pomocą standardowej procedury Seek, która przenosi bieżącą pozycję pliku do określonego komponentu. The FilePos i Rozmiar pliku funkcji można użyć do określenia bieżącej pozycji pliku i bieżącego rozmiaru pliku.
{wróć do początku - pierwszy rekord}
Szukaj (F, 0);
{przejdź do piątego rekordu}
Szukaj (F, 5);
{Przejdź do końca - „po” ostatnim rekordzie}
Szukaj (F, FileSize (F));
Zmień i zaktualizuj
Właśnie nauczyłeś się pisać i czytać całą gamę członków, ale co, jeśli chcesz tylko znaleźć 10. członka i zmienić adres e-mail? Następna procedura robi dokładnie to:
procedura Zmień adres e-mail(const RecN: liczba całkowita; const Nowy e-mail: strunowy) ;var DummyMember: TMember;zaczynać
{przypisz, otwórz, blok obsługi wyjątków}
Szukaj (F, RecN);
Przeczytaj (F, DummyMember);
DummyMember. Email: = NewEMail;
{przeczytaj przejścia do następnego rekordu, musimy
wróć do pierwotnego rekordu, a następnie napisz}
Szukaj (F, RecN);
Napisz (F, DummyMember);
{zamknąć plik}koniec;
Zakończenie zadania
To wszystko - teraz masz wszystko, czego potrzebujesz, aby wykonać swoje zadanie. Możesz zapisać informacje członków na dysku, możesz je odczytać z powrotem, a nawet możesz zmienić niektóre dane (na przykład e-mail) w „środku” pliku.
Ważne jest to, że ten plik nie jest plikiem Plik ASCII, tak to wygląda Notatnik (tylko jeden rekord):
.Delphi Guide g Ò5 · ¿ì. 5.. B V.Lƒ, „¨[email protected]Ï.. ç.ç.ï..