使用win api 读写 ini配置文件

来源:互联网 发布:厦门seo咨询公司 编辑:程序博客网 时间:2024/04/28 23:59

     游戏或者其他应用程序需要很多配置信息,比如:窗口的长宽,是否全屏显示。所以每一个游戏都支持配置文件的读取以及写入。

    而ini文件因为其结构简单易懂,而被广泛应用。记得在实习培训的时候,python作业要求自己实现读取ini文件。python对字符串的操作很强大,当时就考虑在自己的C++程序中加入这个功能。今天在看代码的过程中惊喜的发现了两个api函数,GetPrivateProfileString和 WritePrivateProfileString分别用于读/写 ini文件。

1.读ini文件:

DWORD GetPrivateProfileString(

      LPCTSTR lpAppName,

      LPCTSTR lpKeyName,

      LPCTSTR lpDefaut,

      LPSTR lpReturnedString,

      DWORD nSize,

      LPCTSTR lpFileName);

  •  

    lpAppName 参数是ini文件中section的名字,也就是[]之间的部分
  • lpKeyName 参数是Key
  • lpDefault 默认值,如果没有前面两个参数,则将这个值赋值给返回值
  • lpReturnedString  作为返回值的参数,即接受缓冲区
  • nSize  接收缓冲区大小
  • lpFileName  ini文件完整的路径
  •  DWORD GetPrivateProfileInt(

          LPCTSTR lpAppName,

          LPCTSTR lpKeyName,

          INT lpDefault,

          LPCTSTR lpFileName);

  • lpAppName 参数是ini文件中section的名字,也就是[]之间的部分
  • lpKeyName 参数是Key
  • nDefault  如果没有前两个参数,则以这个值为默认值
  • lpFileName 完整的Ini文件路径
  • 返回这个key对应的值
  • 2. 写ini文件

     BOOL WritePrivateProfileString(

          LPCTSTR lpAppName,

          LPCTSTR lpKeyName,

          LPCTSTR  lpString,

          LPCTSTR  lpFileName);

  • lpAppName 参数是ini文件中section的名字,也就是[]之间的部分
  • lpKeyName 参数是Key
  • lpString  要写入的值
  • lpFileName 完整的Ini文件路径
  • 返回这个key对应的值
  •  

    3. expamle:

    WritePrivateProfileString("screen", "width", "800", "./main.ini");
    WritePrivateProfileString("screen", "height", "600", "./main.ini");
    WritePrivateProfileString("config", "title", "ini_test","./main.ini");

    char title[256];

    int width = GetPrivateProfileInt("screen", "width", 800, "./main.ini");
    int height = GetPrivateProfileInt("screen", "height", 600, "./main.ini");

    GetPrivateProfileString("config", "title", "default", title, sizeof(title), "./main.ini");

     

    4. 说明:

       有一点解释一下,最后一个参数lpFileName所说的完整文件路径,并不是指绝对路径。可以使用相对路径和绝对路径。之所以说是“完整”是与只写出文件名区别的。如:“./file.ini”和“file.ini前者是完整的路径,而后者是文件名。

    5. 其他操作ini文件的函数

    GetPrivateProfileInt()
    GetPrivateProfileSection()
    GetPrivateProfileSectionNames()
    GetPrivateProfileString()
    GetPrivateProfileStruct()
    GetProfileInt()
    GetProfileSection()
    GetProfileString()
    WritePrivateProfileSection()
    WritePrivateProfileString()
    WritePrivateProfileStruct()
    WriteProfileSection()
    WriteProfileString()

    原创粉丝点击