Hur manipulerar INI-filer från Delphi

click fraud protection

INI-filer är textbaserade filer som används för att lagra en applikations konfigurationsdata.

Även om Windows rekommenderar att du använder Windows-registret för att lagra applikationsspecifik konfigurationsdata. I många fall ser du att INI-filer ger ett snabbare sätt för programmet att få åtkomst till dess inställningar. Windows använder till och med INI-filer; Desktop.ini och boot.ini är bara två exempel.

En enkel användning av INI-filer som en statusbesparande mekanism skulle vara att spara storleken och platsen för ett formulär om du vill att ett formulär ska dyka upp igen vid sin tidigare position. Istället för att söka igenom en helhet databas med information För att hitta storlek eller plats används en INI-fil istället.

INI-filformatet

Initialiserings- eller konfigurationsinställningsfil (.INI) är en textfil med en 64 KB-gräns uppdelad i avsnitt, var och en innehåller noll eller fler nycklar. Varje tangent innehåller noll eller fler värden.

Här är ett exempel:

 [SectionName]
keyname1 = värde
;kommentar
keyname2 = värde

instagram viewer

Avdelningsnamn är inneslutna i fyrkantiga parenteser och måste börja i början av en rad. Avsnitt och nyckelnamn är okänsliga för versaler (fallet spelar ingen roll) och kan inte innehålla avståndstecken. De nyckelnamn följs av ett lika tecken ("="), valfritt omgiven av avståndstecken, som ignoreras.

Om samma avsnitt visas mer än en gång i samma fil, eller om samma nyckel visas mer än en gång i samma avsnitt, råder den sista förekomsten.

En nyckel kan innehålla sträng, heltal eller booleanvärde.​

Delphi IDE använder INI-filformatet i många fall. Till exempel, .DSK-filer (skrivbordsinställningar) använder INI-formatet.

TIniFile Class

Delphi tillhandahåller TIniFile klass, förklarad i inifiles.pas enhet, med metoder för att lagra och hämta värden från INI-filer.

Innan du arbetar med TIniFile-metoderna måste du skapa en instans av klassen:

användningar inifiles;
...
var
IniFile: TIniFile;
Börja
IniFile: = TIniFile. Skapa ( 'myapp.ini');

Ovanstående kod skapar ett IniFile-objekt och tilldelar 'myapp.ini' till klassens enda egenskap - klassen FileName-egenskapen —Används för att ange namnet på INI-filen du ska använda.

Koden som skrivs ovan ser för myapp.ini fil i \ Windows katalogen. Ett bättre sätt att lagra applikationsdata är i programmets mapp - ange bara filens fullständiga söknamn Skapa metod:

// placera INI i applikationsmappen,
// låt den ha applikationsnamnet
// och 'ini' för förlängning:

iniFile: = TIniFile. Skapa (ChangeFileExt (Application). ExeName, '. Ini'));

Läser från INI

TIniFile-klassen har flera "lästa" metoder. ReadString läser a strängvärde från en nyckel, ReadInteger. ReadFloat och liknande används för att läsa ett nummer från en nyckel. Alla "lästa" metoder har ett standardvärde som kan användas om posten inte finns.

Till exempel förklaras ReadString som:

fungera ReadString (const Sektion, Ident, Standard: String): String; åsidosätta;

Skriv till INI

TIniFile har en motsvarande "skriva" -metod för varje "läst" -metod. De är WritString, WritBool, WritInteger, etc.

Om vi ​​till exempel vill att ett program ska komma ihåg namnet på den sista personen som använde det, när det var, och vad huvudformskoordinaterna var, kan vi skapa ett avsnitt som heter användare, ett nyckelord som heter Sista, Datum för att spåra informationen och ett avsnitt som heter Placering med nycklar Topp, Vänster, Bredd, och Höjd.

project1.ini
[Användare]
Last = Zarko Gajic
Datum enhet 01/29/2009
[Placering]
Top = 20
Vänster = 35
Bredd = 500
Höjd = 340

Observera att namnet heter Sista innehar ett strängvärde, Datum har ett TDateTime-värde och alla nycklar i Placering avsnittet har ett heltal.

Händelseformuläret OnCreate är den perfekta platsen att lagra koden som behövs för att få tillgång till värdena i programmets initieringsfil:

procedur TMainForm. FormCreate (avsändare: TObject);
var
appINI: TIniFile;
LastUser: string;
LastDate: TDateTime;
Börja
appINI: = TIniFile. Skapa (ChangeFileExt (Application). ExeName, '. Ini'));
Prova
// om ingen sista användare returnerar en tom sträng
LastUser: = appINI.ReadString ('User', 'Last', '');
// om inget sista datum återgår till dagens datum
LastDate: = appINI.ReadDate ('Användare', 'Datum', Datum);
// visa meddelandet
ShowMessage ('Detta program användes tidigare av' + LastUser + 'på' + DateToStr (LastDate));
Top: = appINI.ReadInteger ('Placering', 'Top', Top);
Vänster: = appINI.ReadInteger ('Placering', 'Vänster', Vänster);
Bredd: = appINI.ReadInteger ('Placering', 'Bredd', Bredd);
Höjd: = appINI.ReadInteger ('Placering', 'Höjd', Höjd);
till sist
appINI.Free;
slutet;
slutet;

Huvudformens OnClose-evenemang är perfekt för Spara INI del av projektet.

procedur TMainForm. FormClose (avsändare: TObject; var Åtgärd: TCloseAction);
var
appINI: TIniFile;
Börja
appINI: = TIniFile. Skapa (ChangeFileExt (Application). ExeName, '. Ini'));
Prova
appINI.WriteString ('User', 'Last', 'Zarko Gajic');
appINI.WriteDate ('Användare', 'Datum', Datum);
med appINI, MainForm do
Börja
WritInteger ('Placering', 'Top', Top);
WritInteger ('Placering', 'Vänster', Vänster);
WritInteger ('Placering', 'Bredd', Bredd);
WritInteger ('Placering', 'Höjd', Höjd);
slutet;
till sist
appIni. Fri;
slutet;
slutet;

INI-avsnitt

De EraseSection raderar en hel del av en INI-fil. ReadSection och ReadSections fyll i ett TStringList-objekt med namnen på alla sektioner (och nyckelnamn) i INI-filen.

INI-begränsningar och nedgångar

TIniFile-klassen använder Windows API vilket innebär en gräns på 64 KB för INI-filer. Om du behöver lagra mer än 64 kB med data bör du använda TMemIniFile.

Ett annat problem kan uppstå om du har ett avsnitt med mer än 8 K-värde. Ett sätt att lösa problemet är att skriva din egen version av ReadSection-metoden.

instagram story viewer