Delphi INI dosyaları nasıl yönetilir

INI dosyaları, uygulamanın yapılandırma verilerini depolamak için kullanılan metin tabanlı dosyalardır.

Buna rağmen pencereler uygulamaya özel yapılandırma verilerini depolamak için Windows Kayıt Defteri'ni kullanmanızı önerir, birçok durumda, INI dosyalarının programın ayarlarına erişmesi için daha hızlı bir yol olduğunu görürsünüz. Windows'un kendisi INI dosyalarını bile kullanır; desktop.ini ve boot.ini sadece iki örnek.

Durum kaydetme mekanizması olarak INI dosyalarının basit bir kullanımı, bir formun önceki konumunda yeniden görünmesini istiyorsanız formun boyutunu ve konumunu kaydetmek olacaktır. Bir bütün içinde arama yapmak yerine bilgi veritabanı boyutu veya konumu bulmak için bunun yerine INI dosyası kullanılır.

INI Dosya Biçimi

Başlatma veya Yapılandırma Ayarları dosyası (.INI), her biri sıfır veya daha fazla anahtar içeren bölümlere ayrılmış 64 KB sınırı olan bir metin dosyasıdır. Her anahtar sıfır veya daha fazla değer içerir.

İşte bir örnek:

 [Bölüm adı]
keyname1 = değer
;yorum Yap
keyname2 = değer

instagram viewer

Bölüm adları köşeli parantez içine alınır ve bir satırın başında başlamalıdır. Bölüm ve anahtar adları büyük / küçük harfe duyarlı değildir (büyük / küçük harf önemli değildir) ve boşluk karakterleri içeremez. anahtar adı ardından isteğe bağlı olarak boşluk karakteriyle çevrelenen ve yok sayılan eşit bir işaret ("=") gelir.

Aynı bölüm aynı dosyada birden çok kez görünüyorsa veya aynı anahtar aynı bölümde birden çok kez görünüyorsa, en son gerçekleşir.

Bir anahtar şunları içerebilir sicim, tamsayı veya booledeğer.​

Delphi IDE birçok durumda INI dosya biçimini kullanır. Örneğin, .DSK dosyaları (masaüstü ayarları) INI biçimini kullanır.

TIniFile Sınıfı

Delphi sağlar TIniFile sınıfında inifiles.pas birim, INI dosyalarından değerleri saklama ve alma yöntemleri ile.

TIniFile yöntemleriyle çalışmaya başlamadan önce, sınıfın bir örneğini oluşturmanız gerekir:

kullanımları INIFiles;
...
var
IniFile: TIniFile;
başla
IniFile: = TIniFile. ( 'Myapp.ini') oluşturun;

Yukarıdaki kod bir IniFile nesnesi oluşturur ve sınıfın tek özelliğine 'myapp.ini' atar; DosyaAdı özelliği —Kullanacağınız INI dosyasının adını belirtmek için kullanılır.

Yukarıda yazılan kod, myapp.ini içindeki dosya \Pencereler dizin. Uygulama verilerini depolamanın daha iyi bir yolu uygulamanın klasöründedir - dosyanın tam yol adını belirtmeniz yeterlidir. Oluşturmak yöntem:

// INI'yi uygulama klasörüne yerleştirin,
// uygulama adı olsun
// ve uzantı için 'ini':

iniFile: = TIniFile. Oluştur (ChangeFileExt (Uygulama). ExeName, '. İni'));

INI'den Okuma

TIniFile sınıfının birkaç "read" yöntemi vardır. ReadString bir dize değeri bir anahtardan, ReadInteger. ReadFloat ve benzeri bir anahtardan bir sayı okumak için kullanılır. Tüm "okuma" yöntemleri, giriş mevcut değilse kullanılabilecek varsayılan bir değere sahiptir.

Örneğin, ReadString şöyle bildirilir:

fonksiyon ReadString (const Section, Ident, Default: String): String; geçersiz kılma;

INI'ye yaz

TIniFile her "okuma" yöntemi için karşılık gelen bir "yazma" yöntemine sahiptir. Bunlar WriteString, WriteBool, WriteInteger vb.

Örneğin, bir programın onu kullanan son kişinin adını, ne zaman olduğunu ve ana form koordinatlarının ne olduğunu hatırlamasını istiyorsak, adlı bir bölüm oluşturabiliriz. Kullanıcılar, adlı bir anahtar kelime Son, tarih bilgileri ve adlı bölümü izlemek için Yerleştirme anahtarlarla Üst, Ayrıldı, Genişlik, ve Yükseklik.

project1.ini
[Kullanıcı]
Son = Zarko Gajic
Tarih = 01 olarak / 29/2009
[Yerleştirme]
En = 20
Sol = 35
Genişlik = 500
Yükseklik = 340

Anahtarın Son bir dize değeri tutar, tarih TDateTime değerini tutar ve Yerleştirme bölümünde bir tamsayı değeri bulunur.

Ana formun OnCreate olayı, uygulamanın başlatma dosyasındaki değerlere erişmek için gereken kodu saklamak için mükemmel bir yerdir:

prosedür TMainForm. FormCreate (Gönderen: TObject);
var
appINI: TIniFile;
LastUser: string;
Son Tarih: TDateTime;
başla
appINI: = TIniFile. Oluştur (ChangeFileExt (Uygulama). ExeName, '. İni'));
Deneyin
// son kullanıcı boş bir dize döndürmezse
LastUser: = appINI.ReadString ('Kullanıcı', 'Son', '');
// son tarih yoksa bugünün tarihine dön
LastDate: = appINI.ReadDate ('Kullanıcı', 'Tarih', Tarih);
// mesajı göster
ShowMessage ('Bu program daha önce' + DateToStr (LastDate) 'de' + LastUser + 'tarafından kullanılmıştır);
Üst: = appINI.ReadInteger ('Yerleşim', 'Üst', Üst);
Sol: = appINI.ReadInteger ('Yerleşim', 'Sol', Sol);
Genişlik: = appINI.ReadInteger ('Yerleşim', 'Genişlik', Genişlik);
Yükseklik: = appINI.ReadInteger ('Yerleşim', 'Yükseklik', Yükseklik);
en sonunda
appINI.Free;
son;
son;

Ana formun OnClose etkinliği, INI'yı kaydet projenin bir parçası.

prosedür TMainForm. FormClose (Gönderen: TObject; var Eylem: TCloseAction);
var
appINI: TIniFile;
başla
appINI: = TIniFile. Oluştur (ChangeFileExt (Uygulama). ExeName, '. İni'));
Deneyin
appINI.WriteString ('Kullanıcı', 'Son', 'Zarko Gajic');
appINI.WriteDate ('Kullanıcı', 'Tarih', Tarih);
ile appINI, MainForm yapmak
başla
WriteInteger ('Yerleşim', 'Üst', Üst);
WriteInteger ('Yerleşim', 'Sol', Sol);
WriteInteger ('Yerleşim', 'Genişlik', Genişlik);
WriteInteger ('Yerleşim', 'Yükseklik', Yükseklik);
son;
en sonunda
appIni. Bedava;
son;
son;

INI Bölümleri

EraseSection bir INI dosyasının tüm bölümünü siler. ReadSection ve ReadSections bir TStringList nesnesini INI dosyasındaki tüm bölümlerin (ve anahtar adlarının) adlarıyla doldurun.

INI Sınırlamaları ve Dezavantajları

TIniFile sınıfı Windows API'sı INI dosyalarına 64 KB'lık bir sınır getirir. 64 KB'den fazla veri depolamanız gerekiyorsa, TMemIniFile kullanmanız gerekir.

8 K'dan fazla değere sahip bir bölümünüz varsa başka bir sorun ortaya çıkabilir. Sorunu çözmenin bir yolu, ReadSection yönteminin kendi sürümünü yazmaktır.