zoukankan
html css js c++ java
ini文件读取
#define
SUCCESS 0
#define
NOT_EXIST_FILE 1
#define
NOT_OPEN_FILE 2
#define
NOT_EXIST_SECTION 3
#define
NOT_EXIST_ITEM 4
#define
NOT_ENOUGH_MEMORY 5 /*item_value需要比
max_item_value_length还要多的值
*/
#define
NOT_EXIST_VALUE 6
#define
NOT_MATCH_BRACKET 7
#define
NOT_EXIST_EQUAL 8
#define
SPACE 0x20
#define
LEFT_SQUARE_BRACKET '['
#define
RIGHT_SQUARE_BRACKET ']'
#define
CHINESE_LEFT_SQUARE_BRACKET '【'
#define
CHINESE_RIGHT_SQUARE_BRACKET '】'
#define
EQUAL_SIGN '='
#define
POSTIL ';'
#define
MAX_BUFFER_LENGTH (255+1)
#define
MAX_ITEM_LENGTH (128)
#define
INI (".ini")
#define
NOT_FIND_SECTION 0
#define
FIND_SECTION 1
#ifdef _cplusplus
#define
FALSE false
#define
TRUE true
#else
#define
FALSE 0
#define
TRUE 1
#endif
#ifndef _cplusplus
#define
inline /*虽然编译器不支持,可以在C中支持inline用法不出现语法错误*/
#endif
int
GetValue(
const
char
*
file_name,
const
char
*
section_name,
const
char
*
item_name,
char
*
item_value,
const
unsigned
int
max_item_value_length);
/**/
/*
[in] file_name :提供ini的文件名,可以省略后缀名"ini"
section_name :提供ini中的节名,可以省略"[]"
item_name :提供ini中的项目名
max_item_value_length: 提示item_value的最大值
[out] item_value :获取ini中的项目的值
返回值:
no_file: NOT_EXIST_FILE
not_open_file: NOT_OPEN_FILE
no_section: NOT_EXIST_SECTION
no_item: NOT_EXIST_ITEM
no_more_memory NOT_ENOUGH_MEMORY // item_value需要比max_item_value_length
// 还要多的值
no_value: NOT_EXIST_VALUE
[]no_match: NOT_MATCH_BRACKET
no_equal: NOT_EXIST_EQUAL
*/
...
{
FILE
*
fp;
char
real_file_name[MAX_BUFFER_LENGTH]
=
...
{
0
}
;
char
line_buffer[MAX_BUFFER_LENGTH]
=
...
{
0
}
;
bool
section_exist
=
FALSE;
bool
item_exist
=
FALSE;
bool
enough_memory
=
FALSE;
bool
equal_exist
=
FALSE;
unsigned
int
equal_position
=
0
;
/**/
/*
文件名设置
*/
memset( real_file_name,
0
,
sizeof
(real_file_name) );
strcpy( real_file_name, file_name );
/**/
/*
判断是否有后缀
*/
if
(
0
!=
strcmp(
&
real_file_name[strlen(real_file_name)
-
4
], INI) )
...
{
strcat(real_file_name, INI );
/**/
/*
添加后缀
*/
}
/**/
/*
打开ini文件
*/
fp
=
fopen(real_file_name,
"
r
"
);
if
( NULL
==
fp)
return
NOT_OPEN_FILE;
while
(
!
feof(fp) )
...
{
fgets(fp, line_buffer);
/**/
/*
获取一行的值
*/
DeleteBeginningAndEndSpace(line_buffer);
/**/
/*
删除首尾空
*/
if
( POSTIL
==
line_buffer[
0
] )
/**/
/*
注释
*/
...
{
continue
;
}
/**/
/*
如果节没有找到,判断是否为节,是,判断是否为所需节
*/
if
( (section_exist
==
FALSE)
&&
IsSection(line_buffer)
&&
FindSection(line_buffer,section_name) )
...
{
section_exist
=
TRUE;
}
/**/
/*
找到了所需节,那么进行中内容查找,如果在下一个节之前还没有找到item
那么表明没有找到item值
*/
if
(section_exist )
/**/
/*
节已经找到,那么查找节下面的item
*/
...
{
equal_position
=
ItemEqualPosition( line_buffer );
//
if
( (equal_position
!=
0
)
&&
/**/
/*
表明存在等于号
*/
FindItem( line_buffer, equal_position,item_name ) )
/**/
/*
找到所需要的item了
*/
...
{
item_exist
=
TRUE;
if
( strlen(line_buffer)
-
equal_position
+
1
>
max_item_value_length )
...
{
enough_memory
=
FALSE;
strncpy(value,line_buffer[equal_position
+
1
],
max_item_value_length);
}
//
if
else
...
{
enough_memory
=
TRUE;
strncpy(value,line_buffer[equal_poistion
+
1
],
strlen(line_buffer)
-
equal_position
+
1
);
}
//
else
if
( equal_position
!=
0
)
equal_position
=
TRUE;
}
//
if
}
}
fclose(fp);
if
(
!
section_exist )
return
NOT_EXIST_SECTION;
if
( section_exist
&&
(
!
item_exist) )
return
NOT_EXIST_ITEM;
if
( item_exit
&&
(
!
enough_memory) )
return
NOT_ENOUGH_MEMORY;
if
(
!
equal_exist)
return
NOT_EXIST_EQUAL;
}
bool
FindItem(
const
char
*
string
, unsigned
int
equal_position,
const
char
*
item_name )
/**/
/*
如果找到了所需的item,那么返回TRUE,否则返回FALSE
*/
...
{
char
item[MAX_ITEM_LENGTH]
=
...
{
0
}
;
equal_position
=
( equal_position
>
MAX_ITEM_LENGTH
?
MAX_ITEM_LENGTH : equal_position);
strncpy(item,
string
, equal_position);
item[equal_poistion]
=
'
/*
*
* Copyright (c) 2011 Ubunoon.
* All rights reserved.
*
* email: netubu#gmail.com replace '#' to '@'
* http://www.cnblogs.com/ubunoon
* 欢迎来邮件定制各类验证码识别,条码识别,图像处理等软件
* 推荐不错的珍珠饰品,欢迎订购 *
宜臣珍珠(淡水好珍珠)
*/
查看全文
相关阅读:
failed to push some refs to 'git@github.com:laniu/liuna.git'报错原因
ECMAScript和JavaScript的关系
js面试总结
第16章 脚本化css
代理模式
SQL
VS
Js/Jquery获取iframe中的元素 在Iframe中获取父窗体的元素方法
SQL
C#
原文地址:https://www.cnblogs.com/ubunoon/p/2058925.html
最新文章
Android学习:Notification状态栏通知
AS 常用快捷键
Android新特性介绍,ConstraintLayout完全解析
Android学习:自定义组件,DrawView
程序中的@Override是什么意思?
Android学习:简易图片浏览
Android学习:代码控制UI界面示例
Spring Boot+Drools规则引擎整合
SQL Server DTS向导,字段转换出现202和200错误
REST Client
热门文章
查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究
XML序列化和反序列化(C#)
iOS学习笔记10
iOS学习笔记9
input 限制输入字段总结
es6记录
同步异步
为什么利用多个域名来存储网站资源会更有效?
理解DOM
git 本地与远程关联流程
Copyright © 2011-2022 走看看