ca a deja ete aborde mais... (fichier.ini)

ca a deja ete aborde mais... (fichier.ini) - C++ - Programmation

Marsh Posté le 31-03-2003 à 14:33:33    

En faisant un peu de recherche sur comment lire un fichier .ini je me suis rendu compte qu'il etait conseille de n'utiliser la fonction GetPrivateProfileString(...); que dans un environnement 16 bits. Bien bien mais n'ayant rien trouve d'autre, j'ai teste cela quand meme. Le probleme c'est que mon compilateur (Visual c) ne reconnait pas cette fonction. Des lors, n'y aurait il pas un include a ajouter ou alors cette fonction a elle ete abandonnee ou quoi?
 
Sinon y a pas autre chose que GetPrivateProfileString pour lire dans un fichier .ini a l'heure actuelle?
 
Merci bieng

Reply

Marsh Posté le 31-03-2003 à 14:33:33   

Reply

Marsh Posté le 31-03-2003 à 14:34:54    

hum, va voir du cote de www.flipcode.com rayon code of the day (fouille les archives de cette section). Me semble qu'il y a ce que tu cherches

Reply

Marsh Posté le 31-03-2003 à 14:38:43    

Doit faloir inclure <windows.h>  

Reply

Marsh Posté le 31-03-2003 à 14:43:33    

VisualC++ a écrit :

Doit faloir inclure <windows.h>  
 


 
je pensais aussi mais... non

Reply

Marsh Posté le 31-03-2003 à 14:46:50    

C koi comme appli (t es sous VC mais tu fais koi comme appli) ?
 
Si tu as une WinApp et donc un projet MFC, tu as CWinAPP::GetProfile.. dispo
 
 
Edit : en fait c defini ds Winbase.h


Message édité par VisualC++ le 31-03-2003 à 14:48:37
Reply

Marsh Posté le 31-03-2003 à 15:27:01    

char tempi[1000];
tempi = CWinApp::GetProfileString(LPCTSTR("SECTION" ),LPCTSTR("KEY" ),LPCTSTR("none" ));
 
mais...heu... comment est ce qu'on specifie le fichier dans lequel il doit chercher??  :heink:  
 
Et puis j'ai droit a  :
error C2352: 'CWinApp::GetProfileString' : illegal call of non-static member function
 
EDIT :  

Code :
  1. CString tempi;
  2. CWinApp* pApp = AfxGetApp();
  3. tempi = pApp->GetProfileString(LPCTSTR("SECTION" ),LPCTSTR("KEY" ),LPCTSTR("none" ));


Comme ca, ca passe mais pour le nom de fichier?


Message édité par polo021 le 31-03-2003 à 15:36:14
Reply

Marsh Posté le 31-03-2003 à 15:37:26    

GetProfileString est une fonction de l'API Win32, en VC++ on y accède donc via le namespace global :
 
::GetProfileString
 
Pour info :

Citation :


Client: Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server.
Unicode: Implemented as Unicode and ANSI versions. Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 31-03-2003 à 15:39:22    

Euh c une methode de ta CWinApp si tu en a une

Code :
  1. myApp.GetProfile....


 
Et comment on specifie le .ini comme ca

Code :
  1. free((void*)m_pszProfileName);
  2. m_pszProfileName=_tcsdup(_T(?c:\\dir\\myini.ini?));


 
Tu as pas besoin d appeler free() le destructeur de CWinApp le fait, et c est a placer ds le InitInstance de la WinApp

Reply

Marsh Posté le 31-03-2003 à 16:09:17    

merci, ca fonctionne a moitie. Mais quand je dis a moitie, c'est vraiment a moite.  
 

Code :
  1. CString tempi;
  2. CWinApp* pApp = AfxGetApp();
  3. pApp->WriteProfileString(LPCTSTR("SECTION" ),LPCTSTR("KEY" ),LPCTSTR("chosetrucmuch" ));
  4. tempi= pApp->GetProfileString(LPCTSTR("SECTION" ),LPCTSTR("KEY" ),LPCTSTR("none" ));


for (int i=0;i<12;i++)
 AfxMessageBox((CString)(char)tempi.GetAt(i));
m'affiche ... coercuh
 [:violito]

Reply

Marsh Posté le 31-03-2003 à 16:21:44    

hehe, parfois je pense.[:texla]  
 
Est ce que ca se pourrait que la taille de mes caracteres soit 2 fois plus grande que la taille d'un caractere normal? Sachant que mon programme tourne sur un pocket pc!  Y aurait pas une histoire d'unicode la dedans? Vous en pensez quoi?

Reply

Marsh Posté le 31-03-2003 à 16:21:44   

Reply

Marsh Posté le 31-03-2003 à 16:29:47    

pitetre jsais pas jamais fait sur ce
 
mais bon pour ton test le for je vois pas l interet :D

Code :
  1. CWinApp* pApp = AfxGetApp();
  2. pApp->WriteProfileString(_T("SECTION" ),_T("KEY" ),_T("chosetrucmuch" ));
  3. CString tempi;
  4. tempi= pApp->GetProfileString(_T("SECTION" ),_T("KEY" ),_T("none" ));
  5. AfxMessageBox(tempi);


Reply

Marsh Posté le 31-03-2003 à 16:42:31    

ouais ca fonctionne. [:the real pinzo]  
 
Par contre pour specifier le fichier c'est pas gagne parce que pas de c: sur pocket PC je pense donc :  

Code :
  1. m_pszProfileName=_tcsdup(_T(".\\FICHIER.INI" ));

mais ca ne fonctionne pas, si je n'ecris pas la valeur "chosetrucmuch" avant, il ne trouve rien.
 
Donc je suppose que j'allais ecrire quelque part et que je lisais cette valeur sans aucun rapport avec le fichier.  
 
Je vais essayer de trouver un truc pour resoudre ca.
 
Merci
 [:the real phoenix]  
 
 
 
 

Reply

Marsh Posté le 31-03-2003 à 16:53:58    

Ben tu peut faire ca si ton fichier ini a le mm nom que ton exe
 

Code :
  1. CString csIniName = CString(m_pszHelpFilePath);
  2. csIniName = csIniName.Left(csIniName.GetLength() - 3) + _T("ini" );
  3. free((void*)m_pszProfileName);
  4. m_pszProfileName=_tcsdup(csIniName);


 
Edit : avec le free bien sur


Message édité par VisualC++ le 31-03-2003 à 17:06:34
Reply

Marsh Posté le 31-03-2003 à 17:17:30    

ha ben non c'est ratai. pourtant meme nom (meme casse aussi) mais ca fonctionne pas.
Alors maintenant je sais meme plus si c'est le fichier ou la lecture qui va pas [:ruisseau de larmes]

Reply

Marsh Posté le 31-03-2003 à 17:20:09    

Bah ce que je peut t affirmer c que ca marche sous Win normal (98 2K NT et XP) j ai teste et la sous 2K j ai tester au cas ou car de memeoire.

Reply

Marsh Posté le 31-03-2003 à 17:26:19    

ouais ben merci quand meme. Je vais essayer d'eclaircir ca.
:jap:  
       :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed