0/5 (71 avis)
Snippet vu 47 219 fois - Téléchargée 40 fois
//============================================================== //Pour Lire : GetPrivateProfileString( Nom_Section, Nom_Key, Default, // string par default Destination, Taille_destination, Nom_Fichier // nom du fichier ); // Exemple : // Pour Lire a partir d'un fichier "Test.ini" et // stocker dans char temp[100] qui est une chaine de caractere GetPrivateProfileString( "OPTION", "Clé", "", temp, sizeof(temp), "Test.ini" ); //============================================================== //Pour Ecrire: WritePrivateProfileString( Nom_Section, Nom_Key, Chaine_de_caractere, Nom_Fichier // nom du fichier ); // Exemple : // Pour Ecrire dans un fichier "Test.ini" WritePrivateProfileString( "OPTION", "Clé", "Ajout", // chaine de caractere à ajouter "Test.ini" );
14 juil. 2013 à 13:08
(peut-être juste rajouter dans le message initial le include windows.h)
14 août 2007 à 11:12
Il me reste que faire les conditions sur l'ancien fichier.
Je vous remercie pour votre aide.
A la prochaine
10 août 2007 à 15:06
void CConfig::AddConfigFile(CString sNewFilePath, CString sOldFilePath)
{
//Test
sOldFilePath = TEXT("C:\\affconfig-default.ini");
sNewFilePath = TEXT("C:\\affconfig.ini");
TCHAR szKeysName[1024];
TCHAR inBuf1[1024];
TCHAR szSectionOld[1024];
TCHAR szSectionNew[1024];
TCHAR szSectionNameOld[1024];
TCHAR szSectionNameNew[1024];
TCHAR szTemp[1024];
DWORD nSizeRetNew = 0, nSizeRetOld=0,nSectionsSize=0, dwSectionsSize = 0, dwKeysSize = 0;
//calculer la taille de Buffer
nSizeRetNew = GetPrivateProfileSectionNames( szSectionNameNew,
sizeof( szSectionNameNew), // size of return buffer
sNewFilePath);
// calculer le nombre de section
if(nSizeRetNew > 0)
{
dwSectionsSize = nSizeRetNew + 2;
int nSection=0,npos=0;
while ( npos < nSizeRetNew)
{
npos = npos + (_tcslen(szSectionNameNew + npos)+1);
for (int i=0; (unsigned int)i< dwSectionsSize; i++)
{
_tcsncpy(szSectionNew, szSectionNameNew,_tcslen(szSectionNameNew + 1));// je ne suis pa sur de ca en tous cas ça marche pas
nSectionsSize = GetPrivateProfileSection(szSectionNew,szKeysName,1024,sNewFilePath); //retourne les clés
}
//boucle sur les clés
//for (int i = 0; (unsigned int)i < sizeof(szKeysName); i++)
//{
//}
nSection++;
}
}
}
Je récupère tous mes sections et après j'ai pas réussi à boucler sur ces sections pour récupérer les clés.
Je suis bloqué sur cette partie,Est ce Que quelqu'un a une petite idée?
A+
9 août 2007 à 16:29
Dans ta fonction, est-ce que je peut utiliser des tableaux de TCHAR au lieu de char *?
en faite si j'utilise le char [dwRet = GetPrivateProfileSectionNames(szTemp, 1024, SourceFile);] me retourne une valeur 0 au moment de bulding et j'ai pas trouvé une solution pour l'intégrer avec mon prg.
j'ai essayé de travailler avec des tableaux comme TCHAR sztemp[1024]; à la place de char *szTemp, mais ça ma causer bcq de problème.
A+
9 août 2007 à 10:01
// ALLOCATION / DESALLOCATION
inline void MYMALLOC(void** a, int b)
{
*a=NULL;
if ( b > 0)
{
*a = malloc(b) ;
if (*a != NULL)
memset(*a, '\0', b) ;
}
}
#define MYFREE(a) { if(a !NULL) free((void*)a) ; a NULL ;}
void MergeFile(char *SourceFile, char *TargetFile)
{
char *szSections NULL, *szSectionName NULL;
char *szKeys NULL, *szKeyName NULL, *szKeyValue = NULL;
char *szTargetKeyValue = NULL;
char *szTemp = NULL;
DWORD dwRet 0, dwSectionsSize 0, dwKeysSize = 0;
DWORD dwTargetKeySize = 0;
if (SourceFile && TargetFile)
{
MYMALLOC((void**)&szTemp, 1024);
// Calcul the size of buffer
dwRet = GetPrivateProfileSectionNames(szTemp, 1024, SourceFile);
if (dwRet > 0)
{
dwSectionsSize = dwRet + 2;
while(dwRet == (1024-2))
{
MYFREE(szTemp);
MYMALLOC((void**)&szTemp, dwRet*2);
dwRet = GetPrivateProfileSectionNames(szTemp, dwRet*2, SourceFile);
dwSectionsSize = dwRet + 2;
}
MYFREE(szTemp);
// Fill the buffer
MYMALLOC((void**)&szSections, dwSectionsSize + 1);
dwRet = GetPrivateProfileSectionNames(szSections, dwSectionsSize, SourceFile);
// Loop for each Section
for (int i=0; (unsigned int)i<dwSectionsSize; i++)
{
MYMALLOC((void**)&szSectionName, strlen(szSections + i) + 1);
// Retrieve section name
strncpy(szSectionName, szSections + i, strlen(szSections + i));
MYMALLOC((void**)&szTemp, 1024);
// Calcul the size of buffer
dwRet = GetPrivateProfileSection(szSectionName, szTemp, 1024, SourceFile);
if (dwRet > 0)
{
dwKeysSize = dwRet + 2;
while(dwRet == (1024-2))
{
MYFREE(szTemp);
MYMALLOC((void**)&szTemp, dwRet*2);
dwRet = GetPrivateProfileSection(szSectionName, szTemp, dwRet*2, SourceFile);
dwKeysSize = dwRet + 2;
}
MYFREE(szTemp);
// Fill the buffer
MYMALLOC((void**)&szKeys, dwKeysSize + 1);
dwRet = GetPrivateProfileSection(szSectionName, szKeys, dwKeysSize, SourceFile);
// Loop for each Key
for (int j=0; (unsigned int)j<dwKeysSize; j++)
{
MYMALLOC((void**)&szKeyName, strlen(szKeys + j) + 1);
// Retrieve key name
strncpy(szKeyName, szKeys + j, strlen(szKeys + j));
// If the first char is not ;, this is not a comment
if (szKeyName[0] != ';')
{
// If = is not found, skip key
if (strstr(szKeyName, "=") != NULL)
{
// Initiliaze key value
szKeyValue = strdup( strstr(szKeyName, "=") + 1 );
strstr(szKeyName, "=")[0] = '\0';
if (strlen(szKeyValue) > 0)
{
// Check if this key is in the target file
MYMALLOC((void**)&szTargetKeyValue, 1024);
// Calcul the size of buffer
dwRet = GetPrivateProfileString(szSectionName, szKeyName, "", szTargetKeyValue, 1024, TargetFile);
if (dwRet > 0)
{
dwTargetKeySize = dwRet + 2;
while(dwRet == (1024-2))
{
MYFREE(szTargetKeyValue);
MYMALLOC((void**)&szTargetKeyValue, dwRet*2);
dwRet = GetPrivateProfileString(szSectionName, szKeyName, "", szTargetKeyValue, dwRet*2, TargetFile);
dwTargetKeySize = dwRet + 2;
}
if (dwTargetKeySize != 0)
{
MYFREE(szTargetKeyValue);
MYMALLOC((void**)&szTargetKeyValue, dwTargetKeySize + 1);
dwRet = GetPrivateProfileString(szSectionName, szKeyName, "", szTargetKeyValue, dwTargetKeySize, TargetFile);
if (strlen(szTargetKeyValue) > 0)
{
if(stricmp(szTargetKeyValue, szKeyValue) != 0)
{
// Update the key
BOOL bWritted = WritePrivateProfileString(szSectionName, szKeyName, szKeyValue, TargetFile);
OutputDebugString("toto");
}
}
else
{
// Update the key
WritePrivateProfileString(szSectionName, szKeyName, szKeyValue, TargetFile);
}
MYFREE(szTargetKeyValue);
}
else
{
// Update the key
WritePrivateProfileString(szSectionName, szKeyName, szKeyValue, TargetFile);
}
}
else
{
// Update the key
WritePrivateProfileString(szSectionName, szKeyName, szKeyValue, TargetFile);
}
}
// Add szTemp length to i
j += strlen(szKeyName) + strlen(szKeyValue) + 1/*=*/;
}
else
j += strlen(szKeyName);
}
else
j += strlen(szKeyName);
MYFREE(szKeyValue);
MYFREE(szKeyName);
}
}
// Add szTemp length to i
i += strlen(szSectionName);
MYFREE(szKeys);
MYFREE(szSectionName);
}
}
}
MYFREE(szKeyName);
MYFREE(szKeys);
MYFREE(szSectionName);
MYFREE(szSections);
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.