Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

uG

complicated .ini thing

This topic is 6561 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

What im wonderin is how to open a ini file, and look for the like: textcolor= so i can grab whats to the right of it. But what I want it to jump to that line, so people can rearange what line that "textcolor=" is on and it still can find it. I guess my description is kind of vauge, but I hope its enough. Thx

Share this post


Link to post
Share on other sites
Advertisement
There are two ways you can do this, using built in Windows API calls or your own, hopefully portable, C++ code.

I''ll explain the Windows way first:

Microsoft''s Win32 API provides two functions for manipulating .INI files; the functions being GetPrivateProfileString and WritePrivateProfileString .

Lets set up an example. You have an .ini file located in a directory named C:\MyProgram. The .ini filename is settings.ini . The ''key'' you want to read is named ''textcolor'' and is located under the section ''fonts''.

Your .ini file will look like this:



[fonts]
textcolor=black



Now, somewhere in your program you will make a call to GetPrivateProfileString as follows:



TCHAR buffer[255];
memset(buffer, 0, 255);

DWORD result = GetPrivateProfileString("fonts",
"textcolor",
"defaultcolor",
buffer,
sizeof(TCHAR) * 255,
"c:\\MyProgram\\settings.ini");



The variable ''buffer'' will now contain the the value ''black'' or whatever you chose to put to the right of ''textcolor=''.

You can enumerate all section names or keynames by passing a NULL value to the first or second parameters, respectively.

Hopefully this helps.

Anymore questions, feel free to ask (especially if you want the non-Win32 API specific C++ implementation)

Dire Wolf
direwolf@digitalfiends.com

Share this post


Link to post
Share on other sites
I tried..


#include
#include

void main()
{
TCHAR buffer[255];
memset(buffer, 0, 255);
DWORD result = GetPrivateProfileString("fonts",
"textcolor",
"defaultcolor",
buffer,
sizeof(TCHAR) * 255,
"settings.ini");
cout << buffer;
}


and it always couts "defaultcolor", even though the settings.ini has..


[fonts]
textcolor=black


any ideas?

The include i used for GetPrivateProfileString was windows.h, is that correct?

Edited by - uG on August 28, 2000 11:15:40 PM

Share this post


Link to post
Share on other sites
I just tried it and it works fine. Hmm. Are you sure you typed in the values correctly for your .ini file.

If any of the names in the .ini file are wrong, GetPrivateProfileString(...) will return ''defaultcolor''.

Check your .ini file. I''m guessing that either the section name, [fonts], is misspelled or textcolor is misspelled.

Another thing is to make sure you are picking up the right .ini file. If you are using MS VC++ it copies the executable that is generated up one directory. For example:

C:\MyProgram\Release\Test.exe

gets moved to

C:\MyProgram\Test.exe

when you run it from inside the DevStudio IDE.

If you are still having problems let me know.

Here is the code I used to get it working properly:



#include
#include

int main()
{
TCHAR buffer[255];
memset(buffer, 0, sizeof(TCHAR) * 255);

DWORD result = GetPrivateProfileString("fonts",
"textcolor", "defaultcolor", buffer, sizeof(TCHAR) * 255, "c:\\settings.ini");

std::cout << buffer << std::endl;

return 0;
}



- Dire
direwolf@digitalfiends.com

Share this post


Link to post
Share on other sites
Ok I got it to work, it didnt work cause of putting that function in DWORD. Now what im pondering is how to do that to grab multiple parts, like say the ini is like this...


[fonts]
font1=red
font2=black


When i tried to do it myself, i either got defaultcolor, or when I did it another way, i always got red (even tho i asked for font2)


Edited by - uG on August 29, 2000 7:03:48 PM

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!