C++读ini文件

shentianyu93 2015-01-13 03:50:19
C++ 读ini文件时,文件中没有节, 如何读 键 和 值?求教
...全文
257 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wk89665944 2015-01-15
  • 打赏
  • 举报
回复
没必要那么麻烦,Windows提供了读取ini文件的接口: GetPrivateProfileInt() 从私有初始化文件获取整型数值 GetPrivateProfileString() 从私有初始化文件获取字符串型值 GetProfileInt 从win.ini 获取整数值 GetProfileString 从win.ini 获取字符串值 WritePrivateProfileString 写字符串到私有初始化文件 WriteProfileString 写字符串到win.ini
赵4老师 2015-01-14
  • 打赏
  • 举报
回复
引用 7 楼 shentianyu93 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 直接用ifstream.getline读 ?
CStdioFile file; CFileException ex; CString buff; //file open if ( !file.Open( theApp.filename, CFile::modeRead | CFile::typeText, &ex)) { TCHAR szCause[255]; ex.GetErrorMessage(szCause, 255); buff.Format( "file open failure", szCause); AfxMessageBox( buff); //return; } CString strBuff; //read file while(file.ReadString(strBuff)){ strBuff.Trim(); if(strcmp(strBuff.Left(1),"#") == 0 || strcmp(strBuff,"") == 0){ continue; }else{ theApp.vecFile.push_back(strBuff); } } file.Close(); 文件是 NAME=ZHANGSAN AGE=13 我用这个方法读取到文件中每行的东西以后,如何取到“=” 后面的值?[/quote] 作为一个C程序员,对 scanf,sscanf,fscanf printf,sprintf,fprintf 这类函数的用法,还是要做到“拳不离手,曲不离口”的。
#include <stdio.h>
#include <tchar.h>
#include <string.h>
int main() {
    TCHAR s[]=_T("abc def=123 456\n");
    TCHAR n[256];
    TCHAR v[256];

    _tprintf(_T("[%s]\n"),s);
    if (2==_stscanf(s,_T("%255[^=]=%255[^\n]"),n,v)) {
        _tprintf(_T("get value of [%s]: [%s]\n"),n,v);
    } else {
        _tprintf(_T("Format error:[%s]\n"),s);
    }

    return 0;
}
//[abc def=123 456
//]
//get value of [abc def]: [123 456]
//
shentianyu93 2015-01-13
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
直接用ifstream.getline读 ?
CStdioFile file; CFileException ex; CString buff; //file open if ( !file.Open( theApp.filename, CFile::modeRead | CFile::typeText, &ex)) { TCHAR szCause[255]; ex.GetErrorMessage(szCause, 255); buff.Format( "file open failure", szCause); AfxMessageBox( buff); //return; } CString strBuff; //read file while(file.ReadString(strBuff)){ strBuff.Trim(); if(strcmp(strBuff.Left(1),"#") == 0 || strcmp(strBuff,"") == 0){ continue; }else{ theApp.vecFile.push_back(strBuff); } } file.Close(); 文件是 NAME=ZHANGSAN AGE=13 我用这个方法读取到文件中每行的东西以后,如何取到“=” 后面的值?
赵4老师 2015-01-13
  • 打赏
  • 举报
回复
引用 4 楼 shentianyu93 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 直接用ifstream.getline读 ?
那就是相当于我就只能一行一行的读取文件,然后找到我需要的一行,把前面不需要的东西trim掉?[/quote] 所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
sprawling 2015-01-13
  • 打赏
  • 举报
回复
引用 3 楼 shentianyu93 的回复:
[quote=引用 2 楼 sprawling 的回复:] 用现成的那个类吧
我的文件不存在Section,也可以用这个方法?[/quote] ini文件自己不要手工编辑,如果非得自定义,那就不能当成INI文件来用
shentianyu93 2015-01-13
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
直接用ifstream.getline读 ?
那就是相当于我就只能一行一行的读取文件,然后找到我需要的一行,把前面不需要的东西trim掉?
shentianyu93 2015-01-13
  • 打赏
  • 举报
回复
引用 2 楼 sprawling 的回复:
用现成的那个类吧
我的文件不存在Section,也可以用这个方法?
sprawling 2015-01-13
  • 打赏
  • 举报
回复
用现成的那个类吧
赵4老师 2015-01-13
  • 打赏
  • 举报
回复
直接用ifstream.getline读 ?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧