8.1 Pliki INI
Dane naszego programu możemy zapisać do plików INI. Zapewne nie raz, widziłeś taki plik. Klika plików ini powinniśmy mieć w folderze "WINDOWS", system przechowuje w nich niektóre swoje konfiguracje. Budowa pliku z rozszerzeniem *.ini, przypomina budowę rejestru, plik podzielony jest na sekcje, w tych sekcjach są klucze, a w każdym kluczu jest jedna wartość. Wygląda to mniej więcej tak:
[sekcja 1]
klucz1=wartosc klucza
klucz2=wartosc klucza
[sekcja 2]
klucz1=wartosc klucza
klucz2=wartosc klucza
Jako wartości możemy zapisywać liczby i łańcuchy znaków.
W msdn możemy przeczytać, że Microsoft odradza stosowania plików INI, a wszelkie informacje nakazuje zapisywać w rejestrze. W tym wypadku jednak się nie zgodzę, bo pliki ini, są czasem wygodniejsze niż rejestr, a narazie się nie zanosi, żeby usunęli pliki ini z windowsa, zwłaszcza, że windows zanim zładuje rejestr, sam korzysta z konfiguracji w plikach ini.
Deklaracje funkcji do obsługi plików INI są w pliku: winbase.h
No to do rzeczy.
Do pliku zapisujemy dane funckją WritePrivateProfileString. Zapisuje ona dowolny tekst do danego klucza w danej sekcji. Gdy chcemy zapisać liczbę jako wartość, musimy najpierw ją skonwertować na tekst, gdyż plik ini jest w rzeczywistości tekstem i tylko w takiej postaci są przechowywane także liczby.
LPCSTR lpAppName
Nazwa sekcji do której ma być zapisana wartość. Jeżeli sekcja nie będzie istniała zostanie utworzona.
LPCSTR lpKeyName
Nazwa klucza do którego będzie zapisana dana wartość. Jeżeli klucz nie istnieje zostanie utworzony, jeżeli istnieje wartość zostanie nadpisana. Jeżeli w tym parametrze podamy 0, możemy usunąć całą sekcję.
LPCSTR lpString
Wartość, która jest zapisywana do klucza. Jeżeli podamy tu 0, klucz, jeżeli istniał zostanie usunięty. Dodatkowo w msdn mamy godną uwagi informację, że w windowsach 9x/Me, znak tabulatora(/t) nie jest obsługiwany.
LPCSTR lpFileName
Ścieżka do modyfikowanego pliku INI, jeżeli plik nie będzie istniał zostanie utworzony.
Wartość zawacana przez fucnkję
Jeżeli fucnkja się powiedzie, zostanie zwrócona wartość 1 (TRUE).
Oto przykładowe użycie funkcji WritePrivateProfileString, program stworzy na na dysku C: plik o nazwie "plik INI.ini":
INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR lStart,INT nShow)
{
WritePrivateProfileString(
return
}
Funkcja odczytuje ciąg znaków z danego pliku INI i umieszcza go w zmiennej.
LPCSTR lpAppName
Nazwa sekcji z której ma być wczytana wartość. Jeżeli podamy wartość 0, funkcja sprawdzi wszystkie sekcje.
LPCSTR lpKeyName
Nazwa klucza, z którego zostanie skopiowana wartość. Jeżeli podamy 0, zawrócone zostaną wartości ze wszystkich kluczy z całej sekcji, jako jeden ciąg znaków.
LPCSTR lpDefault
Domyślna wartość, która zostanie umieszczona w zmiennej, w razie niepowodzenia odczytania danych.
LPSTR lpReturnedString
Tablica znaków, w której umieszczony zostanie ciąg odczytanych znaków.
DWORD nSize
Długość odczytywanej wartości(w znakach, bajtach).
LPCSTR lpFileName
Ścieżka do odczytywanego pliku INI. Jeżeli nie podamy tu pełnej ścieżki, windows sprawdzi jedynie systemowe foldery.
Wartość zawacana przez funkcję
Funkcja zwraca ilość odczytanych znaków(bajtów).
INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR lStart,INT nShow)
{
CHAR wartosc[
GetPrivateProfileString(
MessageBox(
return
}
Funkcja odczytuje ciąg znaków z pliku INI, a nastepnie zwraca go jako liczba.
LPCSTR lpAppName
Nazwa sekcji z której odczytywana będzie wartość.
LPCSTR lpKeyName
Klucz z którego będzie odczytywana wartość.
INT nDefault
Domyślna wartość, która zostanie zwróca w razie niepowodzenia odczytywania.
LPCSTR lpFileName
Ścieżka do odczytywanego pliku INI.
Wartość zawacana przez funkcję
Funkcja zwraca odczytaną wartość.