C语言实现 读取写入ini文件实现(转)
#include <stdio.h>
#include <string.h> /*
* 函数名: GetIniKeyString
* 入口参数: title
* 配置文件中一组数据的标识
* key
* 这组数据中要读出的值的标识
* filename
* 要读取的文件路径
* 返回值: 找到需要查的值则返回正确结果
* 否则返回NULL
*/
char *GetIniKeyString(char *title,char *key,char *filename)
{
FILE *fp;
int flag = ;
char sTitle[], *wTmp;
static char sLine[]; sprintf(sTitle, "[%s]", title);
if(NULL == (fp = fopen(filename, "r"))) {
perror("fopen");
return NULL;
} while (NULL != fgets(sLine, , fp)) {
// 这是注释行
if ( == strncmp("//", sLine, )) continue;
if ('#' == sLine[]) continue; wTmp = strchr(sLine, '=');
if ((NULL != wTmp) && ( == flag)) {
if ( == strncmp(key, sLine, wTmp-sLine)) { // 长度依文件读取的为准
sLine[strlen(sLine) - ] = '\0';
fclose(fp);
return wTmp + ;
}
} else {
if ( == strncmp(sTitle, sLine, strlen(sLine) - )) { // 长度依文件读取的为准
flag = ; // 找到标题位置
}
}
}
fclose(fp);
return NULL;
} /*
* 函数名: GetIniKeyInt
* 入口参数: title
* 配置文件中一组数据的标识
* key
* 这组数据中要读出的值的标识
* filename
* 要读取的文件路径
* 返回值: 找到需要查的值则返回正确结果
* 否则返回NULL
*/
int GetIniKeyInt(char *title,char *key,char *filename)
{
return atoi(GetIniKeyString(title, key, filename));
} /*
* 函数名: PutIniKeyString
* 入口参数: title
* 配置文件中一组数据的标识
* key
* 这组数据中要读出的值的标识
* val
* 更改后的值
* filename
* 要读取的文件路径
* 返回值: 成功返回 0
* 否则返回 -1
*/
int PutIniKeyString(char *title,char *key,char *val,char *filename)
{
FILE *fpr, *fpw;
int flag = ;
char sLine[], sTitle[], *wTmp; sprintf(sTitle, "[%s]", title);
if (NULL == (fpr = fopen(filename, "r")))
PRN_ERRMSG_RETURN("fopen");// 读取原文件
sprintf(sLine, "%s.tmp", filename);
if (NULL == (fpw = fopen(sLine, "w")))
PRN_ERRMSG_RETURN("fopen");// 写入临时文件 while (NULL != fgets(sLine, , fpr)) {
if ( != flag) { // 如果找到要修改的那一行,则不会执行内部的操作
wTmp = strchr(sLine, '=');
if ((NULL != wTmp) && ( == flag)) {
if ( == strncmp(key, sLine, wTmp-sLine)) { // 长度依文件读取的为准
flag = ;// 更改值,方便写入文件
sprintf(wTmp + , "%s\n", val);
}
} else {
if ( == strncmp(sTitle, sLine, strlen(sLine) - )) { // 长度依文件读取的为准
flag = ; // 找到标题位置
}
}
} fputs(sLine, fpw); // 写入临时文件
}
fclose(fpr);
fclose(fpw); sprintf(sLine, "%s.tmp", filename);
return rename(sLine, filename);// 将临时文件更新到原文件
} /*
* 函数名: PutIniKeyString
* 入口参数: title
* 配置文件中一组数据的标识
* key
* 这组数据中要读出的值的标识
* val
* 更改后的值
* filename
* 要读取的文件路径
* 返回值: 成功返回 0
* 否则返回 -1
*/
int PutIniKeyInt(char *title,char *key,int val,char *filename)
{
char sVal[];
sprintf(sVal, "%d", val);
return PutIniKeyString(title, key, sVal, filename);
} int main(int argc,char *argv[])
{
printf("%s\n", GetIniKeyString("DOG", "name", "config.ini"));
printf("%d\n", GetIniKeyInt("DOG", "age", "config.ini"));
PutIniKeyString("CAT", "name", "ccc", "config.ini");
PutIniKeyInt("DOG", "age", , "config.ini");
return ;
}
这是我自己创建的一个config.ini文件
#[CAT]
[CAT]
//name=dsfdsf
age=34
name=aaa
name1=ooo
//[DOG]
[DOG]
name=bbb
name1=xxx
age=25
当运行程序后。结果为:
25
最后config.ini文件变为:
[CAT]
//name=dsfdsf
age=34
name=ccc
name1=ooo
//[DOG]
[DOG]
name=bbb
name1=xxx
age=56
C语言实现 读取写入ini文件实现(转)的更多相关文章
- 【WPS】表格使用VBA宏编程写入ini文件实现软件多语言
前言:公司软件最近在做多语言版本,而又来一个西班牙文版本的,之前已经做过中文版本,英文版本和法文版本,之前是同事做的,现在安排我做,之前的做法,使用wps表格,翻译好,然后一个一个复制粘贴到ini文件 ...
- MFC写入.ini文件的策略
在使用WritePrivateProfileString的时候, 如果前两个参数已经在INI文件中存在,那该函数的作用就是修改键值,即楼主说的覆盖 如果第一个参数存在,第二个参数不存在,那作用是在IN ...
- boost::property_tree读取解析ini文件--推荐
boost::property_tree读取解析ini文件 #include "stdafx.h" #include <iostream> #include <b ...
- C语言实现<读取>和<写入> *.ini文件(转)
原地址:https://blog.csdn.net/niha1993825jian/article/details/41086403 #include <stdio.h> #include ...
- 用C#读取,写入ini文件
[DllImport("kernel32.dll")] private static extern bool WritePrivateProfileString(string se ...
- C语言读取写入CSV文件 [一]基础篇
本系列文章目录 [一] 基础篇 [二] 进阶篇--写入CSV [三] 进阶篇--读取CSV 什么是CSV? CSV 是一种以纯文本形式存储的表格数据,具体介绍如下(来自维基百科): 逗号分隔值(Com ...
- C#中选中指定文件并读取类似ini文件的内容
一.背景 由于项目中需要去读取设备的配置信息,配置文件的内容和INI配置文件的格式类似,所以可以按照INI文件的方式来处理.涉及如何打开一个文件,获取打开的文件的路径问题,并读取选中的文件里边的内容. ...
- C++简单使用Jsoncpp来读取写入json文件
一.源码编译 C++操作json字符串最好的库应该就是jsoncpp了,开源并且跨平台.它可以从这里下载. 下载后将其解压到任意目录,它默认提供VS2003和VS2010的工程文件,使用VS2010可 ...
- C++ 中使用boost::property_tree读取解析ini文件
boost 官网 http://www.boost.org/ 下载页面 http://sourceforge.net/projects/boost/files/boost/1.53.0/ 我下载的是 ...
随机推荐
- UVA-1336 Fixing the Great Wall(区间DP)
题目大意:长城(视作x正半轴)有n处破损.有一个智能修复机器人,它的初始位置和移动速度已知.每处破损处都有一组参数(x,c,d),x表示位置,c.d表示在时间t后再修复该处破损的花费为d*t+c.求用 ...
- 知识梳理——CSS篇
css引入方法 内嵌 <head> <meta charset="UTF-8"> <title>Document</title> & ...
- ios 怎么禁止点击子视图的时候不响应父视图的点击事件
方法一 可以在触发手势的方法里添加一个区域的判断,如果点击区域正好是子视图的区域,则过滤掉,不处理此时的手势,如果点击的区域没有被子视图覆盖则,处理手势的事件.具体的代码如下: if( CGRect ...
- 苹果iPhone 5C和5S发布后,消费者如何选择?
9月11日凌晨苹果新品发布会,笔者的朋友圈居然没有看直播的,真果粉太少了.笔者来阐述一些容易忽略的东西. iPhone5C和5S与5有什么不一样? 新品iPhone 5S 外观与iPhone5 相似度 ...
- Jenkins用户权限管理
一.插件安装 插件:Role-based Authorization Strategy版本:2.3.2 二.全局安全配置 进入Jenkins后点击系统管理进入全局安全配置 当插件安装好的时候,授权策略 ...
- icon fonts入门
iconfont网站 http://www.iconfont.cn(推荐) http://fontello.com/ http://fontawesome.io/ https://icomoon. ...
- OPENCV Linux安装
https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
- CentOS 6&7安装ffmpeg
CentOS 6和7安装方法是不一样的,下面分别说明: 安装前都需要先安装epel扩展源 yum -y install epel-release CentOS 6比较简单,安装yum源之后直接安装即可 ...
- webapi 文件下载输出接口
public async ask<HttpResponseMessage> GetGuidingPrincipleDownload(string name ) { bool status ...
- macOS --- 配置基于域名的虚拟主机
在终端运行 sudo vi /Applications/XAMPP/xamppfiles/etc/httpd.conf,打开apache配置文件. 在httpd.conf中找到"#Inclu ...