📄 cinifileimpl.cpp
字号:
/*cinifileimpl.cpp*/
/*
* Common Ini file
*
* Copyright (c) 2003 xuyeli2002@vip.sina.com
* History:
* Author Date
* -------------------------------------------------
* Yeli Xu 2003-01-24
*/
#include <stdio.h>
#include <time.h>
#include "cinierr.h"
#include "cinifileimpl.h"
tm_CINI_IniFile_Impl::tm_CINI_IniFile_Impl(const char * filename)
{
switchInifile(filename);
}
tm_CINI_IniFile_Impl::~tm_CINI_IniFile_Impl()
{
return;
}
tm_return tm_CINI_IniFile_Impl::readString(const char *section,
const char *ident, char *buffer, unsigned int *length)
{
if (_isEmpty())
return TM_CINI_NO_FILE;
if ( (buffer == NULL) || (length == NULL)
|| (section == NULL) || (ident == NULL) )
return TM_CINI_PARAM_ERROR;
if (*length == 0)
return TM_CINI_BUFFER_LENGTH_ERROR;
tm_return ret = TM_CINI_SUCCESS;
unsigned int count = GetPrivateProfileString(section, ident, "",
buffer, *length, _filename);
*length = count;
if (*length == 0)
ret = TM_CINI_NOT_FOUND_IN_FILE;
return ret;
}
tm_return tm_CINI_IniFile_Impl::writeString(const char *section,
const char *ident, const char *valstring)
{
if (_isEmpty())
return TM_CINI_NO_FILE;
if ( (section == NULL) || (ident == NULL) || (valstring == NULL) )
return TM_CINI_PARAM_ERROR;
if (WritePrivateProfileString(section, ident, valstring ,_filename) )
return TM_CINI_SUCCESS;
else
return TM_CINI_FILE_WRITE_ERROR;
}
tm_return tm_CINI_IniFile_Impl::readInt(const char *section,
const char *ident, int * valint)
{
char buffer[MAXLENGTHONELINE];
unsigned int buflen = MAXLENGTHONELINE;
tm_return ret = readString(section, ident, buffer, &buflen);
if (ret == TM_CINI_SUCCESS)
{
size_t len = strlen(buffer);
if (len == 0)
ret = TM_CINI_NOT_INT;
else if ( (len == 1) &&(buffer[0] = '0') )
*valint = 0;
else
{
int res = atoi(buffer);
if (res == 0)
ret = TM_CINI_NOT_INT;
else
*valint = res;
}
}
return ret;
}
tm_return tm_CINI_IniFile_Impl::writeInt(const char *section,
const char *ident, int valint)
{
/*length enough for int64 use*/
#define MAXINT32STRING 21
char buffer[MAXINT32STRING];
sprintf(buffer, "%d", valint);
return writeString(section, ident, buffer);
}
tm_return tm_CINI_IniFile_Impl::readBool(const char *section,
const char *ident, bool *valbool)
{
int tmp;
tm_return ret = readInt(section, ident, &tmp);
if (ret == TM_CINI_SUCCESS)
*valbool = (tmp !=0);
return ret;
}
tm_return tm_CINI_IniFile_Impl::writeBool(const char *section,
const char *ident, bool valbool)
{
int tmp = (valbool ? 1 : 0 );
return writeInt(section, ident, tmp);
}
tm_return tm_CINI_IniFile_Impl::readFloat(const char *section,
const char *ident, double *valdbl)
{
char buffer[MAXLENGTHONELINE];
unsigned int buflen = MAXLENGTHONELINE;
tm_return ret = readString(section, ident, buffer, &buflen);
if (ret == TM_CINI_SUCCESS)
{
size_t len = strlen(buffer);
if (len == 0)
ret = TM_CINI_NOT_INT;
else if ( (len == 1) &&(buffer[0] = '0') )
*valdbl = 0.0;
else if ( (len == 2) &&(strcmp(buffer, ".0") == 0) )
*valdbl = 0.0;
else if ( (len == 3) &&(strcmp(buffer, "0.0") == 0) )
*valdbl = 0.0;
else
{
double res = atof(buffer);
if (res == 0.0)//todo: need modify
ret = TM_CINI_NOT_DOUBLE;
else
*valdbl = res;
}
}
return ret;
}
tm_return tm_CINI_IniFile_Impl::writeFloat(const char *section,
const char *ident, double valdbl)
{
/*length enough for int64 use*/
#define MAXDOUBLESTRING 128;
char buffer[MAXINT32STRING];
sprintf(buffer, "%f", valdbl);
return writeString(section, ident, buffer);
}
tm_return tm_CINI_IniFile_Impl::readSection(const char *section,
char *strings, unsigned int *length)
{
if (_isEmpty())
return TM_CINI_NO_FILE;
if ( (section == NULL) || (strings == NULL) )
return TM_CINI_PARAM_ERROR;
if (*length == 0)
return TM_CINI_BUFFER_LENGTH_ERROR;
tm_return ret = TM_CINI_SUCCESS;
unsigned int count = GetPrivateProfileString(section, NULL, NULL,
strings, *length, _filename);
*length = count;
if (*length == 0)
ret = TM_CINI_NOT_FOUND_IN_FILE;
return ret;
}
tm_return tm_CINI_IniFile_Impl::readSections(char *strings,
unsigned int *length)
{
if (_isEmpty())
return TM_CINI_NO_FILE;
if (strings == NULL)
return TM_CINI_PARAM_ERROR;
if (*length == 0)
return TM_CINI_BUFFER_LENGTH_ERROR;
tm_return ret = TM_CINI_SUCCESS;
unsigned int count = GetPrivateProfileString(NULL, NULL, NULL,
strings, *length, _filename);
*length = count;
if (*length == 0)
ret = TM_CINI_NOT_FOUND_IN_FILE;
return ret;
}
tm_return tm_CINI_IniFile_Impl::eraseSection(const char *section)
{
if (_isEmpty())
return TM_CINI_NO_FILE;
if (section == NULL)
return TM_CINI_PARAM_ERROR;
if (WritePrivateProfileString(section, NULL, NULL, _filename) )
return TM_CINI_SUCCESS;
else
return TM_CINI_FILE_WRITE_ERROR;
}
tm_return tm_CINI_IniFile_Impl::eraseKey(const char *section,
const char *ident)
{
if (_isEmpty())
return TM_CINI_NO_FILE;
if ( (section == NULL) || (ident == NULL) )
return TM_CINI_PARAM_ERROR;
if (WritePrivateProfileString(section, ident, NULL, _filename) )
return TM_CINI_SUCCESS;
else
return TM_CINI_FILE_WRITE_ERROR;
}
tm_return tm_CINI_IniFile_Impl::sectionExists(const char *section)
{
char *buffer = new char[MAXLENGTHONESECTION];
if (buffer == NULL )
return TM_CINI_MEMORY_ALLOC_ERROR;
unsigned int length = MAXLENGTHONESECTION;
tm_return ret = readSection(section, buffer, &length);
delete [] buffer;
return ret;
}
tm_return tm_CINI_IniFile_Impl::valueExists(const char *section,
const char *ident)
{
char *buffer = new char[MAXLENGTHONESECTION];
if (buffer == NULL )
return TM_CINI_MEMORY_ALLOC_ERROR;
unsigned int length = MAXLENGTHONESECTION;
tm_return ret = readSection(section, buffer, &length);
delete [] buffer;
return ret;
}
//switch ini file
tm_return tm_CINI_IniFile_Impl::switchInifile(const char *filename)
{
if (filename == NULL)
_filename[0] = '\0';
else
{
size_t inlen = strlen(filename);
if (inlen == 0)
_filename[0] = '\0';
else
{
size_t copylen = (inlen < _MAX_PATH) ? inlen : (_MAX_PATH-1);
strncpy(_filename, filename, copylen);
_filename[copylen] = '\0';
}
}
return TM_CINI_SUCCESS;
}
//get ini filename
tm_return tm_CINI_IniFile_Impl::getInifile(char *filename,
unsigned int *length)
{
if ( (filename == NULL) || (length == NULL) )
return TM_CINI_PARAM_ERROR;
if (*length == 0)
return TM_CINI_BUFFER_LENGTH_ERROR;
unsigned int len = strlen(_filename);
unsigned int copied = ( len <= *length ? len : *length );
strncpy(filename, _filename, copied);
filename[copied] = '\0';
*length = copied;
return TM_CINI_SUCCESS;
}
//internal functions
bool tm_CINI_IniFile_Impl::_isEmpty()
{
return (strlen(_filename) == 0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -