ini配置檔案讀寫實現

2021-07-26 18:29:34 字數 4347 閱讀 3175

標頭檔案:

#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...