INI dosyası - INI file

başlatma
INI dosyası simgesi.png
Dosya adı uzantısı
.ini
İnternet medya türü
metin/düz, uygulama/metin düzenleme, zz-application/zz-winassoc-ini
Biçim türü Başlatma/Yapılandırma Dosyası

Bir INI dosyası , özellikler için anahtar-değer çiftlerini ve özellikleri düzenleyen bölümlerden oluşan bir yapıya ve sözdizimine sahip metin tabanlı bir içerikten oluşan bilgisayar yazılımı için bir yapılandırma dosyasıdır . Bu yapılandırma dosyalarının adı, bu yazılım yapılandırma yöntemini popülerleştiren MS-DOS işletim sisteminde kullanılan başlatma için INI dosya adı uzantısından gelir . Biçim, birçok yapılandırma bağlamında gayri resmi bir standart haline gelmiştir, ancak diğer işletim sistemlerindeki birçok uygulama, conf ve cfg gibi farklı dosya adı uzantılarını kullanır .

Tarih

Windows'taki yazılım yapılandırmasının birincil mekanizması , orijinal olarak, bölümler halinde düzenlenmiş, satır başına bir anahtar-değer çifti içeren metin satırlarından oluşan bir metin dosyası biçimiydi. Bu biçim, aygıt sürücüleri, yazı tipleri, başlangıç ​​başlatıcıları gibi işletim sistemi bileşenleri için kullanıldı. INI dosyaları da genellikle uygulamalar tarafından bireysel ayarları saklamak için kullanılırdı.

Biçim, Windows 3.1x'e kadar 16-bit Microsoft Windows platformlarında korunmuştur . Windows 95 ile başlayarak Microsoft, Windows Kayıt Defteri'nin kullanımını tercih etti ve geliştiricileri yapılandırma için INI dosyalarını kullanmaktan uzaklaştırmaya başladı. Windows'un sonraki tüm sürümleri, sistem yapılandırması için Windows Kayıt Defterini kullanmıştır, ancak .NET Framework üzerine kurulu uygulamalar özel XML .config dosyaları kullanır. Başlatma dosyası işlevleri Windows'ta hala mevcuttur ve geliştiriciler bunları kullanmaya devam edebilir.

Linux ve Unix sistemleri de sistem yapılandırması için benzer bir dosya formatı kullanır. Ayrıca, platformdan bağımsız yazılım, yapılandırma için bu dosya biçimini kullanabilir. Öyle insanlar tarafından okunabilir çok daha büyük bir karmaşıklık gerektirmeyen yapılandırma dosyaları için kullanılabilir bir biçimdir yüzden, ayrıştırma ve basit.

Git yapılandırma dosyaları, INI dosyalarına benzer.

PHP , php.inihem Windows hem de Linux sistemlerinde " " yapılandırma dosyası için INI biçimini kullanır .

Desktop.ini dosyaları, Windows'ta dizinlerin görüntülenmesini, örneğin bir dizinin simgeleri gibi belirler.

Biçim

Anahtarlar (özellikler)

Bir INI dosyasında bulunan temel öğe, anahtar veya özelliktir . Her anahtar bir isim ve bir değere sahip ayrılmış bir tarafından eşittir işareti (=). Ad, eşittir işaretinin solunda görünür. Windows uygulamasında eşittir işareti ve noktalı virgül ayrılmış karakterlerdir ve anahtarda görünemez. Değer herhangi bir karakter içerebilir.

name=value

Bölümler

Anahtarlar, isteğe bağlı olarak adlandırılmış bölümler halinde gruplandırılabilir, ancak buna gerek yoktur . Bölüm adı tek başına bir satırda köşeli parantezler ( [ ve ] ) içinde görünür . Bölüm bildiriminden sonraki tüm anahtarlar o bölümle ilişkilendirilir. Açık bir "bölüm sonu" sınırlayıcısı yoktur; bölümler bir sonraki bölüm bildiriminde veya dosyanın sonunda biter. Bölümler iç içe olamaz.

[section]
a=a
b=b

Büyük küçük harf duyarlılığı

Bölüm ve özellik adları , Windows uygulamasında büyük/ küçük harfe duyarlı değildir , ancak diğer uygulamalar farklı davranabilir.

Yorumlar

Satırın başındaki noktalı virgül ( ; ) bir yorumu belirtir . Yorum satırları yoksayılır.

; comment text

Değişen özellikler

INI dosya formatı evrensel olarak katı bir şekilde tanımlanmamıştır. Birçok bilgisayar programı , daha önce açıklanan temellerin ötesinde özellikleri destekler. Aşağıda, herhangi bir programda uygulanabilen veya uygulanamayan bazı ortak özelliklerin bir listesi bulunmaktadır .

Yorumlar

Bazı yazılımlar, yorumları belirtmek için noktalı virgüle alternatif olarak sayı işaretinin (#) kullanımını destekler . Ancak diğer lehçelerde anahtar isimde yer alabilir. Örneğin, aşağıdaki satır bir lehçede yorum olarak yorumlanabilir, ancak başka bir lehçede "#var" adlı bir değişken oluşturun. "#var" değeri yoksayılırsa, bir değişkenin sözde uygulamasını oluşturur.

#var=a

Daha genel olarak, aşağıdaki satırlarda olduğu gibi, sayı işaretinin kullanımı tahmin edilemez (ikinci satırdaki sayı işaretinden sonraki boşluğa dikkat edin). Bu nedenle yorumlara başlamak için sayı işareti karakteri kullanılmamalıdır.

#[section]
# var=a

Bazı uygulamalarda, bir yorum, özellikler veya bölüm bildirimlerinden sonra aynı satırda olmak üzere, bir satırda herhangi bir yerde başlayabilir. WinAPI işlevi GetPrivateProfileString dahil olmak üzere diğerlerinde, yorumlar satırlarda kendiliğinden oluşmalıdır.

Yinelenen adlar

Çoğu uygulama, bir bölümde yalnızca belirli bir ada sahip bir özelliğin bulunmasını destekler. Bir özellik adının ikinci tekrarı bir iptale neden olabilir, yoksayılabilir (ve değer atılır) veya ilk oluşumu geçersiz kılabilir (ilk değer atılır). Bazı programlar, çok değerli özellikleri uygulamak için yinelenen özellik adları kullanır.

Aynı ada sahip birden fazla bölüm bildiriminin yorumu da değişir. Bazı uygulamalarda, mükerrer bölümler, sanki bitişikmiş gibi özelliklerini birleştirir. Diğerleri, INI dosyasının bazı yönlerini iptal edebilir veya yok sayabilir.

kaçış karakterleri

Bazı uygulamalar ayrıca , genellikle C sözdizimini izleyen ters eğik çizgi ( ) ile bir kaçış karakteri için değişen destek sunar . Bazıları "satır devamını" destekler, burada hemen ardından gelen bir ters eğik çizgi (satır sonu) satır kesmesinin yok sayılmasına ve "mantıksal satırın" INI dosyasından sonraki gerçek satırda devam etmesine neden olur. Kaçış dizileri ile çeşitli "özel karakterlerin" uygulanması da görülmektedir. \

Ortak kaçış dizileri
Sıra Anlam
\\ \ ( kaçış karakterinden kaçan tek bir ters eğik çizgi )
\' kesme işareti
\" İkili alıntı
\0 boş karakter
\a Zil/Uyarı/Sesli
\b Bazı uygulamalar için Backspace , Bell karakteri
\t Sekme karakteri
\r Satırbaşı
\n Satır besleme
\; Noktalı virgül
\# Numara işareti
\= eşittir işareti
\: Kolon
\x???? ????'a karşılık gelen onaltılık kod noktasına sahip Unicode karakter

Küresel özellikler

Herhangi bir bölüm bildirilmeden önce bildirilen isteğe bağlı "genel" özelliklere de izin verilebilir.

hiyerarşi

En yaygın olarak, INI dosyaları bölümler içinde bölüm hiyerarşisine sahip değildir. Bununla birlikte, bazı dosyaların hiyerarşik bir adlandırma kuralına sahip olduğu görülmektedir. A bölümü, B alt bölümü, C alt bölümü, P özelliği ve V değeri için [A.B.C]ve P=V(Windows' xstart.ini) [A\B\C]ve P=V(IBM Windows sürücü dosyası devlist.ini) veya [A]ve B,C,P = V(Microsoft Visual Studio dosyası AEMANAGR.INI) gibi girişleri kabul edebilirler .

Bunların, bir uygulamanın bir hiyerarşi görünümü vermek için kullandığı basit adlandırma kuralları mı, yoksa dosyanın, bu hiyerarşiyi uygulama programcısına gerçekten sunan bir modül tarafından mı okunduğu açık değildir.

Ad/değer sınırlayıcı

Bazı uygulamalar :, ad/değer sınırlayıcı olarak (eşittir işareti yerine) iki nokta üst üste ( ) izin verir . Boşluk, Linux dünyasında ara sıra kullanılır.

alıntılanan değerler

Bazı uygulamalar, tipik olarak çift ​​tırnak ve/veya kesme işareti kullanılarak değerlerin alıntılanmasına izin verir . Bu, boşlukların açık bir şekilde bildirilmesine ve/veya özel karakterlerin (eşittir, noktalı virgül, vb.) alıntılanmasına izin verir. Standart Windows işlevi GetPrivateProfileString bunu destekler ve değerleri çevreleyen tırnak işaretlerini kaldırır.

Beyaz boşluk

Yorumlanması boşluk değişir. Çoğu uygulama, özellik adının dışındaki baştaki ve sondaki boşlukları yok sayar. Hatta bazıları değerler içindeki boşlukları görmezden gelir (örneğin, "ana bilgisayar adı" ve "ana bilgisayar adı" eşdeğeri yapmak). Bazı uygulamalar, özellik değerinin etrafındaki baştaki ve sondaki boşlukları da yok sayar; diğerleri , eşittir işaretini izleyen tüm karakterleri (boşluk dahil) değerin bir parçası olarak kabul eder.

Bölümlerin ve özelliklerin sırası

Çoğu durumda, bir bölümdeki özelliklerin sırası ve bir dosyadaki bölümlerin sırası önemsizdir, ancak uygulamalar değişebilir.

Örnek

Aşağıdaki örnek dosyanın iki bölümü vardır: biri yazılımın sahibi için, diğeri ise bordro veritabanı bağlantısı için. Yorumlar, dosyayı en son değiştiren kişiyi ve değişiklik nedenini kaydeder.

; last modified 1 April 2001 by John Doe
[owner]
name=John Doe
organization=Acme Widgets Inc.

[database]
; use IP address in case network name resolution is not working
server=192.0.2.62     
port=143
file="payroll.dat"

INI dosyalarına erişme

Windows altında, Profile API , klasik Windows .ini dosyalarından ayarları okumak ve yazmak için kullanılan programlama arabirimidir. Örneğin, GetPrivateProfileString işlevi, bir başlatma dosyasındaki belirtilen bölümden bir dize alır. ( "Özel" profil ile tezat oluşturmaktadır GetProfileStringgelen getirir ki, WIN.INI .)

Aşağıdaki örnek C programı, yukarıdaki örnek INI dosyasından özellik değerlerinin okunmasını gösterir (yapılandırma dosyasının adı şöyle olsun dbsettings.ini):

#include <windows.h>

int main(int argc, _TCHAR *argv[])
{
  _TCHAR dbserver[1000];
  int dbport;
  GetPrivateProfileString("database", "server", "127.0.0.1", dbserver, sizeof(dbserver) / sizeof(dbserver[0]), ".\\dbsettings.ini");
  dbport = GetPrivateProfileInt("database", "port", 143, ".\\dbsettings.ini");
  // N.B. WritePrivateProfileInt() does not exist
  return 0;
}

GetPrivateProfileString işlevinin üçüncü parametresi, yukarıdaki iki işlev çağrısında sırasıyla "127.0.0.1" ve 143 olan varsayılan değerdir. Bu parametre için sağlanan bağımsız değişken NULL ise, varsayılan boş bir "" dizesidir.

Unix altında, INI dosyalarına erişmek için birçok farklı konfigürasyon kitaplığı bulunmaktadır. Genellikle çerçevelere ve araç setlerine zaten dahil edilmiştir. Unix için INI ayrıştırıcı örnekleri arasında GLib , iniparser ve libconfini bulunur .

INI ayrıştırıcılarının karşılaştırılması

İsim Bölüm desteği Bölüm yerleştirme desteği Engelli giriş tanıma Çoklu hat desteği Değer türleri Okuma/Yazma desteği platformu Lisans Programlama dili En son sürüm sürümü
ConfigParser Evet Evet Numara standart dışı Boolean , Sayı , Dize Oku + Yaz *BSD , Linux , macOS , Windows PSFL C (uygulama), Python (kullanım) 3.9.7
GLib Evet Evet Numara Numara Boolean , Sayı , Dize , Dizi Oku + Yaz *BSD , Linux , macOS , Windows LGPL C 2.66.7 (11 Şubat 2021 ; 7 ay önce ) [±] ( 2021-02-11 )

küçük dosya Evet Numara Numara Numara Boolean , Sayı , Dize Oku + Yaz *BSD , Linux , macOS , Windows Apaçi Gitmek 1.2.0
inıh Evet Numara Numara standart dışı Boolean , Sayı , Dize Okumak *BSD , Linux , macOS , Windows BSD C 53
ayrıştırıcı Evet Numara Numara Evet Boolean , Sayı , Dize Oku + Yaz *BSD , Linux , macOS , Windows MİT C 4.1
Java (aracılığıyla java.util.Properties) Numara Numara Numara Evet Sicim Oku + Yaz Platformdan bağımsız Çift lisans: Sınıf yolu istisnası ile GPL sürüm 2 ve özel bir lisans. C (uygulama), Java (kullanım) 17 (14 Eylül 2021 ; 26 gün önce ) [±] ( 2021-09-14 )

11.0.12 (20 Temmuz 2021 ; 2 ay önce ) [±] 8u301 (20 Temmuz 2021 ; 2 ay önce ) [±] ( 2021-07-20 )
 ( 2021-07-20 )

libconfini Evet Evet Evet Evet Boolean , Sayı , Dize , Dizi Okumak *BSD , Linux , macOS , Windows GPL C 1.16.2
PyINI Evet Numara Evet Evet Boolean , Sayı , Dize Oku + Yaz Platformdan bağımsız GPL piton 1.0
KabaYapılandırma Evet Numara Numara Numara Boolean , Sayı , Dize Oku + Yaz Linux , Windows GPL C++ Durdurulan - son sürüm 5.0.5, Kasım 2009'dan itibaren
Windows API'si Evet Numara Numara Numara Sayı , Dize , Yapı Okuma + Yazma (tahribatsız) pencereler tescilli C 10.0.22000.194 (4 Ekim 2021 ; 6 gün önce ) [±] ( 2021-10-04 )
Şarap ( Windows API'sinin uygulanması ) Evet Numara Numara Numara Sayı , Dize , Yapı Okuma + Yazma (tahribatsız) Linux , macOS , Windows LGPL C 6.0.1  Bunu Vikiveri'de düzenleyin7 Haziran 2021 ; 4 ay önce ( 7 Haziran 2021 )
İsim Bölüm desteği Bölüm yerleştirme desteği Engelli giriş tanıma Çoklu hat desteği Değer türleri Okuma/Yazma desteği platformu Lisans Programlama dili En son sürüm sürümü

Dosya eşleme

Başlatma dosyası eşlemesi, bir INI dosyası ile Kayıt Defteri arasında bir eşleme oluşturur . Windows NT ve Windows 95 ile birlikte klasik .ini dosyalarındaki ayarların depolanmasından yeni Windows Kayıt Defteri'ne geçişin bir yolu olarak tanıtıldı . Dosya eşleme, Profil API çağrılarını yakalar ve IniFileMappingKayıt Defteri bölümündeki ayarları kullanarak , okuma ve yazma işlemlerini Kayıt Defteri'ndeki uygun yerlere yönlendirir.

Aşağıdaki örneği kullanarak, örneğin dbsettings.ini adlı bir ayarlar dosyasından sahip bölümünden ad anahtarını getirmek için bir dize çağrısı yapılabilir . Döndürülen değer "John Doe" dizesi olmalıdır:

GetPrivateProfileString("sahip", "ad", ... , "c:\\programs\\oldprogram\\dbsettings.ini");

INI eşlemesi bu Profil API çağrısını alır, verilen dosya adındaki herhangi bir yolu yok sayar ve dizin altındaki dosya adıyla eşleşen bir Kayıt Defteri anahtarı olup olmadığını kontrol eder:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
   CurrentVersion\IniFileMapping

Bu varsa, istenen bölümle eşleşen bir giriş adı arar. Bir girdi bulunursa, INI eşlemesi, değerini Kayıt Defterinin başka bir bölümüne bir işaretçi olarak kullanır. Ardından, Kayıt Defterinin o bölümünde istenen INI ayarını arar.

Eşleşen bir girdi adı bulunamazsa ve (Default)girdi adının altında bir girdi varsa , INI eşlemesi bunu kullanır. Böylece her bölüm adının kendi girişine ihtiyacı yoktur.

HKEY_LOCAL_MACHINE\Yazılım\...\IniFileMapping\dbsettings.ini
(Default) @USR:Yazılım\eskiprogs\inisettings\tümü
database USR:Yazılım\eskiprogs\inisettings\db

Bu durumda, [sahip] bölümü için profil çağrısı şu şekilde eşlenir:

HKEY_CURRENT_USER\Software\oldprogs\inisettings\all
name John Doe
organization Acme Ürünleri

" name" Kayıt defteri girdi adının, istenen INI anahtarıyla eşleştiği bulunur. "John Doe" değeri daha sonra Profil çağrısına döndürülür. Bu durumda, varsayılandaki @ öneki, herhangi bir okumanın diskteki dbsettings.ini dosyasına gitmesini engeller. Sonuç olarak, Kayıt Defterinde bulunmayan hiçbir ayar INI dosyasında aranmaz.

" database" Kayıt defteri girdisi, değerde @ önekine sahip değil; bu nedenle, yalnızca [veritabanı] bölümü için , önce Kayıt Defterindeki ayarlar, ardından diskteki dbsettings.ini dosyasındaki ayarlar alınır.

alternatifler

Windows 95'ten başlayarak , Microsoft, INI dosyası üzerinden Windows kayıt defterinin kullanımını güçlü bir şekilde teşvik etmeye başladı. INI dosyaları genellikle iki düzeyle (bölümler ve özellikler) sınırlıdır ve ikili verileri iyi işlemez. Ancak bu karar, kayıt defterinin monolitik, opak ve ikili olması, dosya sistemiyle uyumlu olması ve işletim sistemi için tek bir hata noktasını temsil etmesi nedeniyle eleştirilere karşı bağışık olmamıştır.

Daha sonra XML tabanlı yapılandırma dosyaları, metin dosyalarındaki yapılandırmayı kodlamak için popüler bir seçim haline geldi. XML, keyfi olarak karmaşık düzeylere ve iç içe yerleştirmeye izin verir ve ikili verileri kodlamak için standart mekanizmalara sahiptir .

Daha yakın zamanlarda, JSON , TOML ve YAML gibi veri serileştirme biçimleri, yapılandırma biçimleri olarak hizmet verebilir. Bu üç alternatif biçim keyfi olarak iç içe geçebilir, ancak INI dosyasından farklı bir sözdizimine sahiptir. Bunlar arasında TOML, INI'ye en çok benzer, ancak TOML'yi kasıtlı olarak INI'nin büyük bir alt kümesiyle uyumlu hale getirme fikri reddedildi.

Bununla birlikte, en yeni INI ayrıştırıcıları, XML , JSON , TOML ve YAML için aynı isteğe bağlı iç içe yerleştirme düzeyine izin verir, aynı şeyi ifade etmek için birden çok sözdizimine izin vererek INI dosyalarının "gayri resmi durumunu" korusa da , yazılan değerler ve Unicode için eşdeğer destek sunar. .

Ayrıca bakınız

Referanslar

Dış bağlantılar