::GetPrivateProfileString lire toute la section de fichier INI

Je suis la modification d'une application C++ et le déplacement de certaines valeurs qui sont actuellement codé en dur.

Je fais cela avec une classe qui va "gérer" cette chose entière et maintenez map<CString, CString> des valeurs à partir du fichier INI.

Droit maintenant, j'ai à lire chaque valeur séparément à l'aide d' ::GetPrivateProfileString fonction - je peux en quelque sorte lire l'article au lieu d'une seule valeur?

Préfèrent ne pas avoir à lire le fichier manuellement, mais si il y a d'raisonnable (c'est à dire efficace + simple à utiliser) je suis ouverte aux suggestions.

Edit: juste eu à l'utiliser "pour de vrai", et que la solution était en effet le passage de la valeur NULL comme le lpKeyName valeur. Code complet, y compris l'analyse de la valeur de retour:

char buffer[MAX_STRING_SIZE];
int charsCount = ::GetPrivateProfileString("MySection", NULL, NULL, buffer, MAX_STRING_SIZE, m_strIniPath);
CString curValue;
curValue.Empty();
char curChar = '
char buffer[MAX_STRING_SIZE];
int charsCount = ::GetPrivateProfileString("MySection", NULL, NULL, buffer, MAX_STRING_SIZE, m_strIniPath);
CString curValue;
curValue.Empty();
char curChar = '\0';
for (int i = 0; i < charsCount; i++)
{
curChar = buffer[i];
if (curChar == '\0')
{
if (curValue.GetLength() > 0)
HandleValue(curValue);
curValue.Empty();
}
else
{
curValue.AppendFormat("%c", curChar);
}
}
if (curValue.GetLength() > 0)
HandleValue(curValue);
'
; for (int i = 0; i < charsCount; i++) { curChar = buffer[i]; if (curChar == '
char buffer[MAX_STRING_SIZE];
int charsCount = ::GetPrivateProfileString("MySection", NULL, NULL, buffer, MAX_STRING_SIZE, m_strIniPath);
CString curValue;
curValue.Empty();
char curChar = '\0';
for (int i = 0; i < charsCount; i++)
{
curChar = buffer[i];
if (curChar == '\0')
{
if (curValue.GetLength() > 0)
HandleValue(curValue);
curValue.Empty();
}
else
{
curValue.AppendFormat("%c", curChar);
}
}
if (curValue.GetLength() > 0)
HandleValue(curValue);
'
) { if (curValue.GetLength() > 0) HandleValue(curValue); curValue.Empty(); } else { curValue.AppendFormat("%c", curChar); } } if (curValue.GetLength() > 0) HandleValue(curValue);

Il n'est pas trivial car il renvoie les clés séparés par le caractère zéro (EOS?) j'ai donc eu à les extraire à l'aide de la boucle comme ci-dessus - le partager ici, pour le bien de tous ceux qui pourraient en avoir besoin. 🙂

Si elle peut être utile pour vous, une fois, j'ai écrit une classe pour gérer une seule section INI qui fonctionne à l'aide GetPrivateProfileSection - vous pouvez avoir un coup d'oeil ici (code.google.com/p/irfanpaint/source/browse/trunk/irfanpaint/... / code.google.com/p/irfanpaint/source/browse/trunk/irfanpaint/...); pas la plus belle ou modernes code que j'ai jamais écrit, mais ça marchait très bien. 🙂
merci, j'ai déjà le code pour l'analyse des valeurs elles-mêmes. 🙂

OriginalL'auteur Shadow Wizard | 2010-12-26