用vc读取ini文件
如果我不知道ini文件某个小节有多少键,要怎么统计出有多少键,键名是什么,值是多少?
GetPrivateProfileSection()这个函数是可以得到小节中所有的键,但是返回的是键名和键值,怎么把它们分开啊。

解决方案 »

  1.   

    查询NULL终止符\0来分隔每个项的值.
      

  2.   

    这个函数返回类似这样的:Name=tian"0Age=20"0Sex=man"0"0 一个字符串,我只能通过“0
    分解出
    Name=tian
    Age=20
    Sex=man
    难道我要靠等号来区分键名和键值吗?
      

  3.   

    LZ可以用这个GetPrivateProfileSectionNames(Retrieves the names of all sections in an initialization file.)
    这个函数会返回一个串,每个Section的名字这间用空格隔开的,你的Section命名时如果中间没有空格就可以
      

  4.   

    一般来说 如果你不知道ini文件某节的键名 你取得它的值有用吗?
    我知道你已经能正确的分别取得这三个东西。
    但是这些东西你最终还是得拿来用 例如
    if str.find("name")
    getitsvalue.
    假如你都不知道有name这个东西存在 你取值有啥用?
    还有一个方法可以解决问题 那就是使用xml
    可以取得每个element的属性表 或者它的名字和值。
    element->attributemap
    遍历此表 取得属性名和属性值 随你爱
      

  5.   

    例子:c:\windows\win.ini; for 16-bit app support
    [fonts]
    [extensions]
    [mci extensions]
    [files]
    [Mail]
    MAPI=1
    [MCI Extensions.BAK]
    aif=MPEGVideo
    aifc=MPEGVideo
    aiff=MPEGVideo
    asf=MPEGVideo
    asx=MPEGVideo
    au=MPEGVideo
    m1v=MPEGVideo

    楼主是不是要得到绿色部分的内容并区分开?
      

  6.   

    http://blog.chinaunix.net/u/5391/showart_572872.html这篇文章有详细读写ini文件的例子
      

  7.   

    while ( p[0] ) // 循环读取section
        {
            wsprintf(szBuffer, szFmtSection, p);
            SendDlgItemMessage(hWinMain, IDC_INI, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)szBuffer);
            SendDlgItemMessage(hWinMain, IDC_INI, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)szCrLf);
           
            // 得到该Section下面的所有keys
            // 每个key都是以0结尾的字符串,最后整个字符串以0 结尾
            GetPrivateProfileSection(p, szBuffer2, sizeof(szBuffer2), szProfileName);
            q = szBuffer2; // 指向第一个key
            while ( q[0] ) // 循环读取所有的keys
            {
                SendDlgItemMessage(hWinMain, IDC_INI, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)q);
                SendDlgItemMessage(hWinMain, IDC_INI, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)szCrLf);
                q += strlen(q) + 1; // 指针移动到下一个key
            }
            p += strlen(p) + 1; // 指针移动到下一个section
        }
      

  8.   

    我只用过GetPrivateProfileString,觉得够用了……
      

  9.   

    我以前做过一个读写INI文件的类,需要的话我可以发给你。