基于QT实现WritePrivateProfileString和GetPrivateProfileString
来源:互联网 发布:姜文与李安 知乎 编辑:程序博客网 时间:2024/06/06 18:00
我用qt库写的两个静态方法,writePrivateProfileString功能比较全了,getPrivateProfileString功能只做了比较实用的。
//************************************
// Method: WritePrivateProfileString
// Usage: strValue是null则删除key,key是null则删除section,section是null直接返回。
// FullName: MyClass::WritePrivateProfileString
// Access: public
// Returns: bool
// Parameter: QString strSectionName
// Parameter: QString strKeyName
// Parameter: QString strValue
// Parameter: QString strFileName
//************************************
bool MyClass::WritePrivateProfileString(QString strSectionName, QString strKeyName, QString strValue, QString strFileName)
{
bool ret = false;
//section是null则直接返回false
if(strSectionName == NULL)
{
return ret;
}
bool flagFindSection = false;//是否找到了section
int pos = 0;
QString strSection("[" + strSectionName + "]");
QString strKey(strKeyName + "=");
//文件不存在,则创建,且直接写入
if(!QFile::exists(strFileName))
{
QFile createFile(strFileName);
if(!createFile.open(QFile::WriteOnly | QIODevice::Text))
{
return ret;
}
//如果key和value不是null,才写内容
if(strKeyName != NULL && strValue != NULL)
{
QTextStream createStream(&createFile);
createStream<<strSection<<"/n";
createStream<<strKey<<strValue<<"/n";
createStream.flush();
ret = true;
}
createFile.close();
return ret;
}
QFile readFile(strFileName);
if (!readFile.open(QFile::ReadOnly | QIODevice::Text))
{
ret = false;
return ret;
}
QFile writeFile(strFileName);
//读入流和写入流
//写入流文件在最后才WriteOnly打开
QTextStream readStream(&readFile);
QTextStream writeStream(&writeFile);
//查找每一行是否包含section
while (!readStream.atEnd())
{
QString line(readStream.readLine());
if (line.indexOf(strSection) != 0) //该行不包含section,直接写入流
{
writeStream<<line<<"/n";
}
else
{
flagFindSection = true; //查到section
ret = true;
//key是null,则跳过该section,写入其余section
if (strKeyName == NULL)
{
do //跳过该section
{
line = QString(readStream.readLine());
} while (line.indexOf("[") != 0 && !readStream.atEnd());
if(readStream.atEnd())
{
break;
}
else //写入其余section
{
writeStream<<line<<"/n";
while(!readStream.atEnd())
{
writeStream<<readStream.readLine()<<"/n";
}
break;
}
}
writeStream<<line<<"/n";//section写入流
line = QString(readStream.readLine());
while(line.indexOf(strKey) != 0 && line.indexOf("[") != 0 && !readStream.atEnd())
{
writeStream<<line<<"/n";
line = QString(readStream.readLine());
}
if(readStream.atEnd())//文件末尾,若value!=null则直接加上key
{
//直接加上
if(strValue != NULL)
{
writeStream<<strKey<<strValue<<"/n";
}
}
else if(line.indexOf("[") == 0)//查到下一个section,若value!=null则在下一个section前直接加上key
{
if(strValue != NULL)
{
writeStream<<strKey<<strValue<<"/n";
}
writeStream<<line<<"/n";
while(!readStream.atEnd()) //剩余行写入流中
{
writeStream<<readStream.readLine()<<"/n";
}
break;
}
else if(line.indexOf(strKeyName) == 0)//查到key,若value!=null则修改value
{
if(strValue != NULL)
{
line = line.mid(0, line.indexOf("=") + 1) + strValue;
writeStream<<line<<"/n";
}
while(!readStream.atEnd()) //剩余行写入流中
{
writeStream<<readStream.readLine()<<"/n";
}
break;
}
}
}
if(!flagFindSection)//若未查到该section,且key和value!=null,写入section和key=value
{
if(strKeyName != NULL && strValue != NULL)
{
writeStream<<strSection<<"/n";
writeStream<<strKey<<strValue<<"/n";
}
}
readFile.close();
//写打开文件
if (!writeFile.open(QFile::WriteOnly | QIODevice::Text))
{
ret = false;
return ret;
}
writeStream.flush();//写入流到文件
writeFile.close();
return ret;
}
//************************************
// Method: GetPrivateProfileString
// Usage: strSectionName和strKeyName是null则pReturnedValue设为strDefault,若strDefault为null则设为""
// FullName: MyClass::GetPrivateProfileString
// Access: public
// Returns: int。返回字符串长度(不包括'/0', <=size-1);若数组长度过小则同样返回size-1;
// Parameter: QString strSectionName
// Parameter: QString strKeyName
// Parameter: QString strDefault
// Parameter: char * pReturnedValue
// Parameter: int size
// Parameter: QString strFileName
//************************************
int MyClass::GetPrivateProfileString(QString strSectionName, QString strKeyName, QString strDefault, char * pReturnedValue, int size, QString strFileName)
{
//设置默认返回字符串
if(strDefault == NULL)
{
strDefault = "";
}
//文件不存在,返回默认字符串及其长度
if (!QFile::exists(strFileName) || strSectionName == NULL || strKeyName == NULL)
{
return StrCopy(strDefault, pReturnedValue, size);
}
QString strSection("[" + strSectionName + "]");
QString strKey(strKeyName + "=");
QFile readFile(strFileName);
//打开失败,返回默认字符串及其长度
if (!readFile.open(QFile::ReadOnly | QIODevice::Text))
{
return StrCopy(strDefault, pReturnedValue, size);
}
QTextStream readStream(&readFile);
while (!readStream.atEnd())
{
QString line(readStream.readLine());
if(line.indexOf(strSection) == 0) //找到Section
{
line = readStream.readLine();
while(line.indexOf(strKey) != 0 && line.indexOf("[") != 0 && !readStream.atEnd())
{
line = readStream.readLine();
}
if (line.indexOf(strKey) == 0) //找到Key
{
QString source(line.mid(strKey.length()));
readFile.close();
return StrCopy(source, pReturnedValue, size);
}
}
}
readFile.close();
//未找到,返回默认值及其长度
return StrCopy(strDefault, pReturnedValue, size);
}
//************************************
// Method: StrCopy
// FullName: MyClass::StrCopy
// Access: Private
// Returns: int
// Parameter: QString source
// Parameter: char *dest
// Parameter: int size
//************************************
int MyClass::StrCopy(QString source, char *dest, int size)
{
QByteArray temp = source.toAscii();
//拷贝字符串;
//size合适,返回不加'/0'的字符串长度
if(source.length() <= size - 1)
{
strcpy(dest, temp.data());
return source.length();
}
//拷贝字符串;
//size过小,返回size-1
else
{
strncpy(dest, temp.data(), size-1);
dest[size - 1] = '/0';
return size-1;
}
}
- 基于QT实现WritePrivateProfileString和GetPrivateProfileString
- WritePrivateProfileString和GetPrivateProfileString读写ini配置文件
- 利用WritePrivateProfileString和GetPrivateProfileString读写配置文件.ini
- GetPrivateProfileString ,WritePrivateProfileString详解
- GetPrivateProfileString ,WritePrivateProfileString详解
- C 语言实现读配置文件(.ini)函数,替代GetPrivateProfileString,WritePrivateProfileString
- GetPrivateProfileString和WritePrivateProfileString头文件引入的注意点
- GetPrivateProfileString &&WritePrivateProfileString 调用系统读写
- c++配置文件ini---GetPrivateProfileString(...)\WritePrivateProfileString(...)
- 写入配置的函数WritePrivateProfileString和读取配置文件的函数GetPrivateProfileInt和GetPrivateProfileString
- c++ stl实现对配置文件的读写 根据windows API WritePrivateProfileString,GetPrivateProfileString简单改写
- GetPrivateProfileString和WritePrivateProfileString都是先打开文件操作完成后再关闭文件
- INI文件编程,WINAPI函数WritePrivateProfileString,GetPrivateProfileString
- INI文件编程,WINAPI函数WritePrivateProfileString,GetPrivateProfileString
- 利用GetPrivateProfileString/WritePrivateProfileString读写配置文件(.ini)
- INI文件编程,WINAPI函数WritePrivateProfileString,GetPrivateProfileString
- C++读写ini配置文件GetPrivateProfileString()&WritePrivateProfileString()
- INI文件编程,WINAPI函数WritePrivateProfileString,GetPrivateProfileString
- Netbeans 6.0 CLDC/MIDP开发快速入门指南(二)
- 直观了解武汉的窗口:推荐我秀中国
- 计算占用内存大小的方法
- 核对表:需求
- MySQL发布安全修复程序
- 基于QT实现WritePrivateProfileString和GetPrivateProfileString
- ECC加密算法入门介绍
- MySQL CEO对甲骨文既爱又恨
- 核对表:架构
- 用API函数在DELPHI中实现“非典型”窗体
- 如何在ext3上恢复数据
- Java 国际化 - 使用 ResourceBundles 显示本地消息(转载,英文)-
- MySQL将获得“稳定”交易
- Delphi_Excel例子:单元格拷贝粘贴