Enkelt uttryckt är en fil en binär sekvens av någon typ. I Delphi, det finns tre klasser av fil: typ, text och otypad. Typade filer är filer som innehåller data av en viss typ, till exempel Dubbel, heltal eller tidigare definierad anpassad posttyp. Textfiler innehåller läsbara ASCII-tecken. Oinskrivna filer används när vi vill införa en minst möjlig struktur på en fil.
Typade filer
Medan textfiler består av rader som avslutas med en CR / LF (#13#10) kombination, skrivna filer består av data hämtade från en viss typ av datastruktur.
Till exempel skapar följande deklaration en posttyp som heter TMember och en matris med variabler för TMember-poster.
typ
TMember = spela in
Namn: sträng[50];
e-post:
sträng[30];
Inlägg: LongInt;
slutet;
var medlemmar: array[1..50] av TMember;
Innan vi kan skriva informationen till disken måste vi förklara en variabel av en filtyp. Följande kodrad anger en F-filvariabel.
var F: fil av TMember;
Obs: För att skapa en typfil i Delphi använder vi följande syntax:
var SomeTypedFile: fil av SomeType
Bastypen (SomeType) för en fil kan vara en skalartyp (som Dubbel), en arraytyp eller posttyp. Det bör inte vara en lång sträng, dynamisk matris, klass, objekt eller en pekare.
För att börja arbeta med filer från Delphi, måste vi länka en fil på en disk till en filvariabel i vårt program. För att skapa den här länken måste vi använda AssignFile procedur för att associera en fil på en disk med en filvariabel.
AssignFile (F, 'Members.dat')
När kopplingen till en extern fil har upprättats måste filvariabeln F 'öppnas' för att förbereda den för läsning och skrivning. Vi kallar Återställ procedur för att öppna en befintlig fil eller Omskriva för att skapa en ny fil. När ett program slutför behandlingen av en fil måste filen stängas med hjälp av proceduren CloseFile. När en fil är stängd uppdateras den externa filen. Filvariabeln kan sedan associeras med en annan extern fil.
I allmänhet bör vi alltid använda undantagshantering; många fel kan uppstå när du arbetar med filer. Till exempel: om vi kallar CloseFile för en fil som redan är stängd rapporterar Delphi ett I / O-fel. Å andra sidan, om vi försöker stänga en fil men ännu inte har kallat AssignFile, är resultaten oförutsägbara.
Skriv till en fil
Anta att vi har fyllt en rad Delphi-medlemmar med deras namn, e-post och antal inlägg och vi vill lagra denna information i en fil på disken. Följande kod kommer att göra jobbet:
var
F: fil av TMember;
i: heltal;
Börja
AssignFile (F, 'members.dat');
Omskriva (F);
Prova
för j: = 1 till 50 do
Skriv (F, Medlemmar [j]);
till sist
CloseFile (F);
slutet;slutet;
Läs från en fil
För att hämta all information från filen 'members.dat' skulle vi använda följande koda:
var
Medlem: TMember
F: fil av TMember;Börja
AssignFile (F, 'members.dat');
Återställ (F);
Prova
Medan inte Eof (F) börjar
Läs (F, medlem);
{DoSomethingWithMember;}
slutet;
till sist
CloseFile (F);
slutet;slutet;
Notera: Eof är EndOfFile-kontrollfunktionen. Vi använder den här funktionen för att se till att vi inte försöker läsa bortom filens slut (utöver den senast lagrade posten).
Söker och positionerar
Filer öppnas normalt i tur och ordning. När en fil läses med standardproceduren Läs eller skrivs med standardproceduren Skriv flyttas den aktuella filpositionen till nästa numeriskt ordnade filkomponent (nästa post). Typade filer kan också nås slumpmässigt genom standardproceduren Sök, som flyttar den aktuella filpositionen till en specificerad komponent. De FilePos och Filstorlek funktioner kan användas för att bestämma den aktuella filpositionen och den aktuella filstorleken.
{gå tillbaka till början - den första posten}
Söka (F, 0);
{gå till 5: e posten}
Söka (F, 5);
{Hoppa till slutet - "efter" den sista posten}
Söka (F, FileSize (F));
Ändra och uppdatera
Du har precis lärt dig hur du skriver och läser hela gruppen med medlemmar, men vad händer om allt du vill göra är att söka till den 10: e medlemmen och ändra e-postmeddelandet? Nästa procedur gör exakt det:
procedur Byta e-mail(const RecN: heltal; const Ny E-post: sträng) ;var DummyMember: TMember;Börja
{tilldela, öppna, undantagshanteringsblock}
Söka (F, RecN);
Läs (F, DummyMember);
DummyMember. E-post: = NewEMail;
{läs flyttar till nästa post, vi måste
gå tillbaka till den ursprungliga posten och skriv sedan}
Söka (F, RecN);
Skriv (F, DummyMember);
{stäng fil}slutet;
Slutför uppgiften
Det är det - nu har du allt du behöver för att utföra din uppgift. Du kan skriva medlemmarnas information till disken, du kan läsa den tillbaka och du kan till och med ändra data (till exempel e-post) i "mitt" i filen.
Vad som är viktigt är att den här filen inte är en ASCII-fil, det är så det ser ut i Anteckningar (endast en post):
. Delphi Guide g Ò5 · ¿ì. 5.. B V.Lƒ, „¨[email protected]Ï.. ç.ç.ï..