Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2951 connectés 

 


Dernière réponse
Sujet : [C] Fichier ini
Carbon_14 Pour mettre le fichier INI dans le même répertoire que l'EXE, j'utilise
    char *ChINI;
 
    LngChnNom = 255;
    if ((ChINI = (char *)malloc(LngChnNom + 1)) == NULL)
    {
      LastError = ERR_ALOC;
      return;
    }
    {
//  Cherche le path pour pas encombrer répertoire Windows avec INI
      int  Long;
      char *ptr;
      GetModuleFileName(hInst, ChINI, LngChnNom);
      ptr = strrchr(ChINI, '.');
      Long = (int)(ptr - ChINI);
      ChINI[Long] = '\0';
      strcat(ChINI, ".INI" ); // AJOUTE INI AU NOM DE L'APPLICATION
    }
Ca marche sous Win 3.11 et 95/98/NT.
hInst est l'instance du prog.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Carbon_14 Pour mettre le fichier INI dans le même répertoire que l'EXE, j'utilise
    char *ChINI;
 
    LngChnNom = 255;
    if ((ChINI = (char *)malloc(LngChnNom + 1)) == NULL)
    {
      LastError = ERR_ALOC;
      return;
    }
    {
//  Cherche le path pour pas encombrer répertoire Windows avec INI
      int  Long;
      char *ptr;
      GetModuleFileName(hInst, ChINI, LngChnNom);
      ptr = strrchr(ChINI, '.');
      Long = (int)(ptr - ChINI);
      ChINI[Long] = '\0';
      strcat(ChINI, ".INI" ); // AJOUTE INI AU NOM DE L'APPLICATION
    }
Ca marche sous Win 3.11 et 95/98/NT.
hInst est l'instance du prog.
taureau oui tu y as le chemin complet, c'est d'ailleur comme cela que application.exename est correctement renseignée, en fait Application.exename se contente de faire un appel à ParamStr(0);
antp il prend le repertoire courant; et sous Win98, ME, NT4, 2K et XP ce n'est pas le répertoire du programme, c'est "Mes documents" ou le dernier dossier utilisé.
Il n'y a que sous Win95, 3.x et DOS que c'était le répertoire du prog.
D'où l'intérêt de Application.ExeName de C++Builder/Delphi, mais j'ai jamais trouvé l'équivalent en MFC :(
Y a bien le premier param du main(arc, argv) qui contient le nom du prog, mais je sais pas si y a le chemin complet.
El_gringo non, il lit pas les fichiers depuis la racine d programme... je sais pas d'ou tu sors ça... lit la doc sur la fonction WritePrivateProfileString, et autres, ...si tu veux qu'il lise à la racine de ton prog, comment chemin, mets ".\FicIni.ini"
bkadoum J'ai déclaré buffer commme ca:
 
char *buffer;
buffer = new char[255];
 
Mais je viens de trouver, en fait il faut donner le chemin complet pour accéder au .ini! Je me demande pourquoi car normalement il lit les fichier depuis la racine du programme
El_gringo moi je sais...:D
enfin, je pense...
buffer, tu l'as déclaré comment ?
 
si tu l'as déclaré comme char* ou comme LPSTR, c normal que ça marche pas... y faut réverver l'espace mémoire.

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

bkadoum Putain qu'c'est chiant ces fonctions windows ca marche jamais du premier coup!
 
voila j'appel cette fameuse fonction:
 
GetPrivateProfileString("general", "pathname", "Error", buffer, 255, "config.ini" );
 
Voici mon fichier config.ini, il se trouve dans le même répertoire que mon programme:
 
[general]
pathname=files/
 
Pourquoi buffer prend la valeur par défault quand même??
LetoII Dans ce cas tu inclue un numero de verssion et tu charge le DLL qui convient au début de ton aplli :)
youdontcare

LetoII a écrit a écrit :

T'es pas forcé d'utiliser un fichier ini pour le faire, tu peux aussi écrire directement tes données en binaire dans un fichier, il suffit que tu sache l'ordre et le type de tes variables pour les récupérer aprés au lencement de ton prog (via une fonction que tu crée) mais bon c pas géniale quand tu veux modifier les valeures dans le fichier à la main (faut avoir un éditeur exa et bien savoir compter en base 16 :)) )  



même si tu veux empêcher l'utilisateur de trifouiller les paramètres, c'est le truc à ne jamais faire. si tu sauves un fichier binaire, il faut absolument sauver le nom de tes variables avec et s'en servir à la relecture. sinon à la prochaine version de ton soft, bon courage pour tout relire dans le bon ordre, traiter les nouvelles variables, les obsolètes, etc.
 
le plus simple reste un fichier .ini (y'a des fonctions win32 pour, regarder du côté de WritePrivateProfileString()) ... ou xml pour les fans :)

antp pour le fichier binaire, tu fous tes parametres dans une structure, comme ça tu lis ou écrit ta structure dans le fichier.
C'est le plus facile si tu n'es pas sous Windows.
Avec Borland C++Builder y a le TIniFile.
Sinon dans l'API Windows y a des fonctions C, comme dit plus haut.
LetoII T'es pas forcé d'utiliser un fichier ini pour le faire, tu peux aussi écrire directement tes données en binaire dans un fichier, il suffit que tu sache l'ordre et le type de tes variables pour les récupérer aprés au lencement de ton prog (via une fonction que tu crée) mais bon c pas géniale quand tu veux modifier les valeures dans le fichier à la main (faut avoir un éditeur exa et bien savoir compter en base 16 :)) )
antsite sisi c une fonction du genre WriteConfigFile()
bkadoum ouais je sais mais ils ont pas repondu :)
antsite y a déjà eu un post je crois, fais une recherche
bkadoum J'ai un programme où j'aimerai initializer mes variables via un fichier texte, dois-je utiliser un fichier ini? Comment on fait?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)