begin process at 2010 03 21 16:32:39
  Trouver un code source :
 
dans
 

12 commentaire(s) de LallThis sur des sources sur tout CodeS-SourceS

Déposé sur Ecrire/lire dans un fichier ini

Voila la fonction :

// 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);
}
Posté le : 09/08/2007 10:01:30

Déposé sur Ecrire/lire dans un fichier ini

Je ne dirai rien de plus, Arnaud16022 a raison.
Si tu veux, j'ai déjà une fonction toute faite qui permet de fusionner deux fichiers.

YamNet
Posté le : 09/08/2007 09:35:45

Déposé sur Ecrire/lire dans un fichier ini

Salut,

Tu as placé ton code lorsque de l'évènement de changement de sélection de ta listbox change.
Donc si tu n'a rien dans ta listbox, c'est normal que ton code ne soit pas executé, car si la listbox est vide, tu ne peux pas changer la sélection.
Fait plutot un autre bouton qui va charger ta listbox à partir de ton fichier .INI

LallThis
Posté le : 16/02/2006 09:42:42

Déposé sur Ecrire/lire dans un fichier ini

Je voulais savoir, si tu passe to programme en mode debug (F5) et que tu possitionnes un point d'arret (breakpoint) sur la fonction GetPrivateProfileString et que tu appuie sur F10 (pour passer à l'instruction suivante), quelles sont les données stockés dans ta variable "temp" ?

Question qui n'a rien à voir, tu utilise quoi pour développer ?

LallThis
Posté le : 15/02/2006 16:02:19

Déposé sur Ecrire/lire dans un fichier ini

Quand tu passes en debug, après l'appel de GetPrivateProfileString, y'a quoi dans temp ????

Comment tu ajoutes à ta listbox ???

LallThis
Posté le : 15/02/2006 15:34:13

Déposé sur Ecrire/lire dans un fichier ini

Je ne vois pas pourquoi ça ne fonctionnerai pas !!!!
Tu es sur que dans le fichier Test.ini, il y a bien une section nommé "OPTION", avec une clé nommé "Clé" et qu'il y a des données dedans.
Car typiquement, si GetPrivateProfileString retourne la valeur spécifié par défaut, c'est que qu'il y a un paramètre qui n'existe pas.

LallThis
Posté le : 15/02/2006 14:36:00

Déposé sur Ecrire/lire dans un fichier ini

Tu as essayer de mettre comme chemin seulement "Test.ini" et non ".\\Test.ini" ?
Essai aussi de ne pas mettre sizeof(temp) mais 100.

LallThis
Posté le : 15/02/2006 11:54:04

Déposé sur Ecrire/lire dans un fichier ini

Salut,
Un projet en MFC ne pose aucun problème.
Donne moi l'appel de GetPrivateProfileString().
Si la fonction retour un code erreur, donne le moi aussi.

Lallthis
Posté le : 15/02/2006 10:54:27

Déposé sur Ecrire/lire dans un fichier ini

Y'a deja des exemples de l'utilisation...
pas besoin de fair une appli.

Bye
Lallthis
Posté le : 10/03/2003 09:23:55

Déposé sur Ecrire/lire dans un fichier ini

Je pense que non, car ces deux fonctions sont des API.
Tu peux refaires tes fonctions, mais c'ets plus rapide avec les API.

Bye
LallThis
Posté le : 04/03/2003 14:19:14

1 2


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales