標頭檔案:
#pragma once
class operateini
;
原始檔:
#include "stdafx.h"
#include "operateini.h"
#include #include #include #include #define size_line 1024 //每行最大長度
#define size_filename 256 //檔名最大長度
#define min(x, y) (x <= y) ? x : y
typedef enum _elinetype_ elinetype ;
operateini::operateini(void)
operateini::~operateini(void)
//去除串首尾空格,原串被改寫
char *operateini::strstrip(char *s)
//不區分大小寫比較字串
int operateini::stricmp(const char *s1, const char *s2)
while ( ch1 && (ch1 == ch2) );
return(ch1 - ch2);
}//取一行
//輸入:資料區(指標及長度)
// 有效內容位置為[buf, rem1)
int operateini::getline(char *buf, int buflen, char *content, char **rem1, char **rem2, char **nextline)
//2個cr或lf,行結束
if (cntcr == 2 || cntlf == 2)
//cr或lf各1個之後任意字元,行結束
if (cntcr + cntlf >= 2)
//cr或lf之後出現其它字元,行結束
if ((cntcr || cntlf) && *p != '\r' && *p != '\n')
break;
switch (*p) else
break;
} }*nextline = p;
*rem2 = p - cntcr - cntlf;
if (*rem1 == null)
*rem1 = *rem2;
cont2 = *rem1 - cntblank;
if (cont1 == null)
i = (int)(cont2 - cont1);
if (i >= size_line)
return line_error;
//內容頭尾已無空格
memcpy(content, cont1, i);
content[i] = 0;
if (content[0] == '[' && content[i - 1] == ']')
return line_section;
if (strchr(content, '=') != null)
return line_value;
return line_error;
}//取一節section
//輸入:節名稱
int operateini::findsection(const char *section, char **sect1, char **sect2, char **cont1, char **cont2, char **nextsect, char* gbuffer, int gbuflen)
while (gbuflen - uselen > 0)
empty = nextline;
} else
if (line_value == type)
empty = nextline;
} }if (!found) return 0;
*cont2 = empty;
*nextsect = nextline;
return 1;
}//從一行取鍵、值
//輸入:內容串(將被改寫)
//輸出:鍵串、值串
void operateini::getkeyvalue(char *content, char **key, char **value)
釋放ini檔案所佔資源
//void inifilefree()
////}
//載入ini檔案至記憶體
int operateini::inifileload(const char *filename, char* gbuffer, int* gbuflen)
fseek(file, 0, seek_set);
len = fread(gbuffer, 1, len, file);
fclose(file);
*gbuflen = len;
return 1;
}//讀取值原始串
int operateini::inigetvalue(const char *section, const char *key, const char *defvalue, char *value, int maxlen, char* gbuffer, int gbuflen)
while (gbuflen - uselen > 0)
} else
if (line_value == type)
if (!found)
continue;
getkeyvalue(content, &key0, &value0);
if (stricmp(key0, key) == 0)
return 1;
}} }
//未發現鍵值取預設
if (value != null) else
} return 0;
}//獲取字串,不帶引號
int operateini::inigetstring(const char *section, const char *key, const char *defvalue, char *value, int maxlen, const char *filepath)
else
if (value[0] == '\"' && value[len - 1] == '\"')
return ret;
}//獲取整數值
int operateini::inigetint(const char *section, const char *key, int defvalue, const char* filepath)
//設定字串:若value為null,則刪除該key所在行,包括注釋
int operateini::inisetstring(const char *section, const char *key, const char *value, const char* filepath)
if (findsection(section, §1, §2, &cont1, &cont2, &nextsect, gbuffer, gbuflen) == 0)
//找到節,則節內查詢key
p = cont1;
len = (int)(cont2 - cont1);
while (len > 0) else
fwrite(gbuffer + len, 1, gbuflen - len, file); //寫入key所在行含注釋之後部分
fclose(file);
//inifileload(gfilename);
return 1;
} } len -= (int)(nextline - p);
p = nextline;
} //未找到key
//value無效則返回
if (value == null)
return 0;
//在檔案尾部新增
file = fopen(filepath, "wb");
if (file == null)
return 0;
len = (int)(cont2 - gbuffer);
fwrite(gbuffer, 1, len, file); //寫入key之前部分
fprintf(file, "%s = %s\n", key, value);
fwrite(gbuffer + len, 1, gbuflen - len, file); //寫入key之後部分
fclose(file);
//inifileload(gfilename);
return 1;
}
讀寫配置檔案 ini
配置檔案中經常用到ini檔案,在vc中其函式分別為 其中個引數的意思 lpctstr lpstring 是鍵值,也就是變數的值,必須為lpctstr或cstring型別 lpctstr lpfilename 完整的ini檔案路徑名 lpctstr lpdefaut 如果沒有其前兩個引數值,則將此值賦...
讀寫配置檔案 ini
在我們寫的程式當中,總有一些配置資訊需要儲存下來,以便完成程式的功能,最簡單的辦法就是將這些資訊寫入ini檔案中,程式初始化時再讀入.具體應用如下 一.將資訊寫入.ini檔案中.1.所用的winapi函式原型為 bool writeprivateprofilestring lpctstr lpkey...
讀寫INI配置檔案
在一些c s程式中我們經常會使用ini配置檔案 優點 1.靈活。2.相對於一些資料量的程式,相對使用資料庫更節約資源。配置檔案操作類 internal static class operconfigfile path.getdirectoryname assembly.getexecutingass...