::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. 🙂
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
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de lire le fichier manuellement, mais il permet de lire le manuel pour GetPrivateProfileString:
OriginalL'auteur Eugen Constantin Dinca
Vous devriez probablement envisager l'utilisation de Coup de pouce.PropertyTree (ce qui fournit une INI analyseur) :
OriginalL'auteur icecrime
Avez-vous regardé GetPrivateProfileSection? http://msdn.microsoft.com/en-us/library/ms724348(SV.85).aspx
Désolé il avait maintenant utiliser ce code "pour de vrai" et de cette méthode est de retourner l'ensemble de la section de données alors que j'ai besoin que les touches - Eugen réponse est plus précise.
OriginalL'auteur kenny