Pliki INI są plikami konfiguracyjnymi, i do tego celu są głownie stosowane, przechowują najczęściej właściwości różnych obiektów, choć nie zawsze, ponieważ, są bardzo wygodne w korzystaniu, przez co łatwo i wygodnie używa się ich do innych zadań związanych z zapisem danych do pliku.
Jeśli czytelnik miał już wcześniej do czynienia z zapisem/odczytem do rejestru, zauważy podobieństwo, jednak tutaj nie zapisujemy do klucza a do piku.
Aby moc zacząć korzystać z plików INI w kodzie źródłowym w środowisku BCB należy dołączyć plik inifiles.hpp.
| 1 2 3 | #include <inifiles.hpp> |
Teraz możemy już utworzyć obiekt klasy TiniFiles.
| 1 2 3 | TIniFile *PlikIni=new TIniFile("C:\plik.ini"); |
Utworzyliśmy właśnie plik ini gotowy już do wykorzystania.
Do pliku ini możemy zapisać w następujący sposób (przedstawię to na różnych typach).
| 1 2 3 4 5 6 7 8 9 10 11 12 | TIniFile *PlikIni=new TIniFile("C:\plik.ini"); bool ZmiennaLogiczna=true; AnsiString Tekst="Jakiś tam tekst"; int liczba=123; PlikIni->WriteBool("Sekcja","ZmiennaLogiczna",ZmiennaLogiczna); PlikIni->WriteString("Sekcja","tekst",Tekst); PlikIni->WriteInteger("Sekcja","liczba",liczba); delete PlikIni; |
Wykonanie powyższego kodu spowoduje utworzenie pliku "plik.ini" na dysku c oraz zapisanie do niego poniższego tekstu:
| 1 2 3 4 5 6 | [Sekcja] ZmiennaLogiczna=0 tekst=Jakiś tam tekst liczba=123 |
czyli jako parametry funkcji podajemy kolejno :
-nazwa sekcji
-nazwa wartości
-wartość
Teraz przedstawię sposób odczytu tych wartości.
| 1 2 3 4 5 6 7 8 9 10 11 12 | TIniFile *PlikIni=new TIniFile("C:\plik.ini"); bool ZmiennaLogiczna; AnsiString Tekst int liczba; ZmiennaLogiczna=PlikIni->ReadBool("Sekcja","ZmiennaLogiczna",false); Tekst=PlikIni->ReadString("Sekcja","tekst","domyślny tekst"); Liczba=PlikIni->ReadInteger("Sekcja","liczba",0); delete PlikIni; |
W tym przypadku zmienia się tylko nazwa funkcji z Write na Read, a jako parametry podajemy kolejno:
-Nazwa sekcji
-Nazwa wartości
-Domyślna wartość, (jeśli w pliku ini nie ma przypisanej wartości)
Jeśli chcemy odczytać wszystkie sekcje w pliku INI, musimy mieć jakiś obiekt z "Items" np. ListBoxa, wtedy wpisanie Sekcji wygląda następująco.
| 1 2 3 | PlikIni->ReadSections(ListBox->Items); |
Jeśli chcemy odczytac liste nazw wartości postępujemy tak:
| 1 2 3 | PlikIni->ReadSectionsValue("Sekcja",ListBox->Items); |
Usuwanie całej sekcji
| 1 2 3 | PlikIni->EraseSection("Sekcja"); |
Usuwanie podanej wartości z sekcji
| 1 2 3 | PlikIni->DeleteKey("Sekcja","NazwaWartości"); |
Sprawdzenie czy istnieje sekcja/wartość
| 1 2 3 4 5 6 7 | if(PlikIni->SectionExists("Sekcja")) ShowMessage("sekcja istnieje"); if(PlikIni->ValueExists("Secka","Nazwa wartości")) ShowMessage("Wartość istnieje); |
Dodatkowo można zapisać następujące typy wartości:
-WriteDate
-WriteTime
-WriteDateTime