Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 2 years ago.
The community reviewed whether to reopen this question 2 years ago and left it closed:
Original close reason(s) were not resolved
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(13)
也许是一个迟到的答案..但是,值得了解选项..如果您需要跨平台解决方案,绝对可以尝试 GLIB,它很有趣..(https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html )
Maybe a late answer..But, worth knowing options..If you need a cross-platform solution , definitely you can try GLIB,, its interesting.. (https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html)
如果您已经在使用 Qt
那么读取一个值
还有很多其他转换器可以将您的 INI 值转换为标准类型和 Qt 类型。 有关详细信息,请参阅有关 QSettings 的 Qt 文档。
If you are already using Qt
Then read a value
There are a bunch of other converter that convert your INI values into both standard types and Qt types. See Qt documentation on QSettings for more information.
我从来没有解析过ini文件,所以我不能对这个问题说得太具体。
但我有一个建议:
只要现有的轮子满足您的要求,就不要重新发明轮子
http ://en.wikipedia.org/wiki/INI_file#Accessing_INI_files
http://sdl-cfg.sourceforge.net/
http://sourceforge.net/projects/libini/
http://www.codeproject.com/KB/files/config-file -parser.aspx
祝你好运:)
I have never parsed ini files, so I can't be too specific on this issue.
But i have one advice:
Don't reinvent the wheel as long as an existing one meets your requirements
http://en.wikipedia.org/wiki/INI_file#Accessing_INI_files
http://sdl-cfg.sourceforge.net/
http://sourceforge.net/projects/libini/
http://www.codeproject.com/KB/files/config-file-parser.aspx
Good luck :)
如果您需要跨平台解决方案,请尝试 Boost 的程序选项 图书馆。
If you need a cross-platform solution, try Boost's Program Options library.
您可以使用 Windows API 函数,例如 GetPrivateProfileString () 和 GetPrivateProfileInt()< /a>.
You can use the Windows API functions, such as GetPrivateProfileString() and GetPrivateProfileInt().
我使用 SimpleIni。 它是跨平台的。
I use SimpleIni. It's cross-platform.
这个问题有点老了,但我会发布我的答案。 我已经测试了各种 INI 类(您可以在我的 网站上看到它们< /a>),我还使用 simpleIni,因为我想在 Windows 和 winCE 上使用 INI 文件。
Window 的 GetPrivateProfileString() 仅适用于 winCE 上的注册表。
使用 simpleIni 很容易阅读。 这是一个例子:
this question is a bit old, but I will post my answer. I have tested various INI classes (you can see them on my website) and I also use simpleIni because I want to work with INI files on both windows and winCE.
Window's GetPrivateProfileString() works only with the registry on winCE.
It is very easy to read with simpleIni. Here is an example:
我知道这个问题很老了,但我遇到它是因为我需要一些跨平台的Linux,win32...我编写了下面的函数,它是一个可以解析INI文件的单个函数,希望其他人会发现它有用。
规则与 注意事项:
要解析的 buf 必须是 NULL 终止的字符串。 将 ini 文件加载到 char 数组字符串中并调用此函数来解析它。
节名称必须用 [] 括号括起来,例如 [MySection],值和节也必须在没有前导空格的行上开始。 它将解析带有 Windows \r\n 或 Linux \n 行结尾的文件。 注释应使用 # 或 // 并从文件顶部开始,注释不应与 INI 条目数据混合。 返回字符串两端的引号和刻度被修剪掉。 仅当空格位于引号之外时才会被修剪。 字符串不需要有引号,如果缺少引号,空格将被修剪。 您还可以提取数字或其他数据,例如,如果您有一个浮点数,只需在 ret 缓冲区上执行 atof(ret) 即可。
如何使用...示例....
I know this question is very old, but I came upon it because I needed something cross platform for linux, win32... I wrote the function below, it is a single function that can parse INI files, hopefully others will find it useful.
rules & caveats:
buf to parse must be a NULL terminated string. Load your ini file into a char array string and call this function to parse it.
section names must have [] brackets around them, such as this [MySection], also values and sections must begin on a line without leading spaces. It will parse files with Windows \r\n or with Linux \n line endings. Comments should use # or // and begin at the top of the file, no comments should be mixed with INI entry data. Quotes and ticks are trimmed from both ends of the return string. Spaces are only trimmed if they are outside of the quote. Strings are not required to have quotes, and whitespaces are trimmed if quotes are missing. You can also extract numbers or other data, for example if you have a float just perform a atof(ret) on the ret buffer.
How to use... example....
除非您计划使应用程序跨平台,否则使用 Windows API 调用将是最好的方法。 只需忽略 API 文档中有关仅提供 16 位应用程序兼容性的注释即可。
Unless you plan on making the app cross-platform, using the Windows API calls would be the best way to go. Just ignore the note in the API documentation about being provided only for 16-bit app compatibility.
如果您对平台可移植性感兴趣,也可以尝试Boost.PropertyTree。 它支持 ini 作为持久性格式,尽管属性树的深度仅为 1 层。
If you are interested in platform portability, you can also try Boost.PropertyTree. It supports ini as persistancy format, though the property tree my be 1 level deep only.
我最终使用了本线程中未提及的 inipp 。
https://github.com/mcmtroffaes/inipp
是 MIT 许可的仅标头实现,非常简单添加到项目并使用 4 行。
I ended up using inipp which is not mentioned in this thread.
https://github.com/mcmtroffaes/inipp
Was a MIT licensed header only implementation which was simple enough to add to a project and 4 lines to use.
inih 是一个用 C 编写的简单 ini 解析器,它也带有一个 C++ 包装器。 用法示例:
作者还在此处提供了现有库的列表。
inih is a simple ini parser written in C, it comes with a C++ wrapper too. Example usage:
The author has also a list of existing libraries here.
您是否尝试过 libconfig; 非常类似于 JSON 的语法。 与 XML 配置文件相比,我更喜欢它。
Have you tried libconfig; very JSON-like syntax. I prefer it over XML configuration files.