fileread.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 35
    下载次数
  • 2005-07-27 14:46
    上传日期
一个很好用的读写INI文件的类,各函数使用方法请看头文件
fileread.rar
  • iniread
  • INIMANGER.cpp
    7.4KB
  • INIMANGER.h
    1.8KB
  • www.pudn.com.txt
    218B
内容介绍
// INIMANGER.cpp: implementation of the CINIMANGER class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "INIMANGER.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CINIMANGER::CINIMANGER() { strSection=NULL; dwKeyNum=NULL; strKey=NULL; dwSectionNum=0; dwTotalKeyNum=0; strProfileName=""; } CINIMANGER::~CINIMANGER() { Release(); } BOOL CINIMANGER::LoadProfileFile(CString strFileName) { char lpReturnValue[MAX_CHARS]; char lpKeyValue[MAX_CHARS]; DWORD i,j; if(strProfileName!="") Release(); ::RtlZeroMemory(lpReturnValue,MAX_CHARS); //枚举Section ::GetPrivateProfileString(NULL,NULL,NULL,lpReturnValue,MAX_CHARS,strFileName); if(::lstrcmp(lpReturnValue,"")==0) return FALSE; for(i=0;i<MAX_CHARS;i++) { if(lpReturnValue[i]==0) { if(dwSectionNum>=MAX_CHARS/2) return FALSE; dwSectionNum++; if(lpReturnValue[i+1]==0) break; else continue; } } strSection=new CString[dwSectionNum]; if(strSection==NULL) return FALSE; j=0; for(i=0;i<MAX_CHARS;i++) { if(lpReturnValue[i]!=0) strSection[j]+=lpReturnValue[i]; else if(lpReturnValue[i+1]!=0) j++; else break; } ::RtlZeroMemory(lpReturnValue,MAX_CHARS); //枚举所有Section的Key并取得其Value dwKeyNum=new DWORD[dwSectionNum]; if(dwKeyNum==NULL) return FALSE; for(i=0;i<dwSectionNum;i++) dwKeyNum[i]=0; for(i=0;i<dwSectionNum;i++) { GetPrivateProfileString(strSection[i],NULL,NULL,lpReturnValue,MAX_CHARS,strFileName); for(int j=0;j<MAX_CHARS;j++) { //if(lpReturnValue[j]!=0) strKey[i][dwKeyNum[i]]+=lpReturnValue[j]; if(lpReturnValue[j]==0) { if(dwKeyNum[i]>=MAX_CHARS/2) return FALSE; dwKeyNum[i]++; /*//取值 ::RtlZeroMemory(lpKeyValue,MAX_CHARS); GetPrivateProfileString(strSection[i],strKey[i][dwKeyNum[i]-1],NULL,lpKeyValue,MAX_CHARS,strFileName); lpIniKey[dwTotalKeyNum]=new INIKEY; lpIniKey[dwTotalKeyNum]->Section=strSection[i]; lpIniKey[dwTotalKeyNum]->Key=strKey[i][dwKeyNum[i]-1]; lpIniKey[dwTotalKeyNum]->Value.Format("%s",lpKeyValue);*/ if(dwTotalKeyNum>=MAX_CHARS) return FALSE; dwTotalKeyNum++; if(lpReturnValue[j+1]==0) break; else continue; } } } strKey=new CString*[dwSectionNum]; if(strKey==NULL) return FALSE; for(i=0;i<dwSectionNum;i++) strKey[i]=new CString[dwKeyNum[i]]; //取所有strKey int k=0; int m=0; for(i=0;i<dwSectionNum;i++) { GetPrivateProfileString(strSection[i],NULL,NULL,lpReturnValue,MAX_CHARS,strFileName); k=0; for(j=0;j<MAX_CHARS;j++) { if(lpReturnValue[j]!=0) strKey[i][k]+=lpReturnValue[j]; else if(lpReturnValue[j+1]==0) break; else k++; } } lpIniKey=new LPINIKEY[dwTotalKeyNum]; if(lpIniKey==NULL) return FALSE; k=0; for(i=0;i<dwSectionNum;i++) { for(j=0;j<dwKeyNum[i];j++) { ::RtlZeroMemory(lpKeyValue,MAX_CHARS); GetPrivateProfileString(strSection[i],strKey[i][j],NULL,lpKeyValue,MAX_CHARS,strFileName); lpIniKey[k]=new INIKEY; lpIniKey[k]->Section=strSection[i]; lpIniKey[k]->Key=strKey[i][j]; lpIniKey[k]->Value.Format("%s",lpKeyValue); k++; } } strProfileName.Format("%s",strFileName); return TRUE; } BOOL CINIMANGER::Release() { if(strProfileName=="") return FALSE; if(strSection!=NULL) { delete [] strSection; strSection=NULL; } if(dwKeyNum!=NULL) { delete [] dwKeyNum; dwKeyNum=NULL; } if(strKey!=NULL) { for(DWORD i=0;i<dwSectionNum;i++) { if(strKey[i]!=NULL) { delete [] strKey[i]; strKey[i]=NULL; } } delete [] strKey; } if(lpIniKey!=NULL) { for(DWORD i=0;i<dwTotalKeyNum;i++) { delete lpIniKey[i]; lpIniKey[i]=NULL; } delete [] lpIniKey; lpIniKey=NULL; } dwSectionNum=0; dwTotalKeyNum=0; strProfileName=""; return TRUE; } BOOL CINIMANGER::Save() { if(strProfileName=="") return FALSE; //检查INI文件 HANDLE hFile=CreateFile(strProfileName.GetBuffer(strProfileName.GetLength()),GENERIC_WRITE|GENERIC_READ,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL); CloseHandle(hFile); for(DWORD i=0;i<dwTotalKeyNum;i++) { WritePrivateProfileString(lpIniKey[i]->Section.GetBuffer(MAX_PATH),\ lpIniKey[i]->Key.GetBuffer(MAX_PATH),\ lpIniKey[i]->Value.GetBuffer(MAX_PATH),\ strProfileName.GetBuffer(MAX_PATH)); } return TRUE; } CString CINIMANGER::GetKey(CString strSection,CString strKey,CString strDefault) { for(DWORD i=0;i<dwTotalKeyNum;i++) { if(strSection==lpIniKey[i]->Section&&strKey==lpIniKey[i]->Key) return lpIniKey[i]->Value; } return strDefault; } int CINIMANGER::GetKey(CString strSection,CString strKey,int iDefault) { for(DWORD i=0;i<dwTotalKeyNum;i++) { if(strSection==lpIniKey[i]->Section&&strKey==lpIniKey[i]->Key) { int iReturn=atoi(lpIniKey[i]->Value.GetBuffer(MAX_PATH)); return iReturn; } } return iDefault; } void CINIMANGER::SetKey(CString strSection,CString strKey,CString strValue) { for(DWORD i=0;i<dwTotalKeyNum;i++) { if(strSection==lpIniKey[i]->Section&&strKey==lpIniKey[i]->Key) { lpIniKey[i]->Value=strValue; return; } } lpIniKey[dwTotalKeyNum]=new INIKEY; lpIniKey[dwTotalKeyNum]->Section=strSection; lpIniKey[dwTotalKeyNum]->Key=strKey; lpIniKey[dwTotalKeyNum]->Value=strValue; dwTotalKeyNum++; for(DWORD j=0;j<dwSectionNum;j++) { if(strSection==this->strSection[j]) { dwKeyNum[j]++; return; } } dwSectionNum++; dwKeyNum[dwSectionNum-1]++; return; } void CINIMANGER::SetKey(CString strSection,CString strKey,int iValue) { for(DWORD i=0;i<dwTotalKeyNum;i++) { if(strSection==lpIniKey[i]->Section&&strKey==lpIniKey[i]->Key) { lpIniKey[i]->Value.Format("%d",iValue); return; } } lpIniKey[dwTotalKeyNum]=new INIKEY; lpIniKey[dwTotalKeyNum]->Section=strSection; lpIniKey[dwTotalKeyNum]->Key=strKey; lpIniKey[dwTotalKeyNum]->Value=iValue; dwTotalKeyNum++; for(DWORD j=0;j<dwSectionNum;j++) { if(strSection==this->strSection[j]) { dwKeyNum[j]++; return; } } dwSectionNum++; dwKeyNum[dwSectionNum-1]++; return; } int CINIMANGER::GetSectionNum() { return dwSectionNum; } int CINIMANGER::GetTotalKeyNum() { return dwTotalKeyNum; } int CINIMANGER::GetSectionKeyNum(CString strSection) { for(DWORD i=0;i<dwSectionNum;i++) { if(this->strSection[i]==strSection) return dwKeyNum[i]; } return 0; } CString CINIMANGER::GetProfileName() { return strProfileName; } int CINIMANGER::EnumSection(CString* strSection,int nMaxNum) { if((int)dwSectionNum>nMaxNum) return -1; for(DWORD i=0;i<dwSectionNum;i++) strSection[i]=this->strSection[i]; return dwSectionNum; } int CINIMANGER::EnumKey(CString strSection,CString* strKey,int nMaxNum) { for(DWORD i=0;i<dwSectionNum;i++) { if(this->strSection[i]==strSection) { if((int)dwKeyNum[i]>nMaxNum) return FALSE; for(DWORD j=0;j<dwKeyNum[i];j++) strKey[j]=this->strKey[i][j]; return dwKeyNum[i]; } } return -1; } int CINIMANGER::EnumAllValue(CString* strValue,int nMaxNum) { if((int)dwTotalKeyNum>nMaxNum) return -1; for(DWORD i=0;i<dwTotalKeyNum;i++) strValue[i]=lpIniKey[i]->Value; return dwTotalKeyNum; }
评论
    相关推荐
    • delphi+读写ini文件
      delphi读写ini的例子,用于delphi读写ini
    • Linux读写ini文件
      Linux Ini文件读写 已在实际项目上使用 用法: CIni ini; ini.OpenFile("./Test.ini","r" ); char *pVal1 = ini.GetStr("Section1","key2"); int nKey = ini.GetInt("Section2","key1"); 实现方法用的是二层...
    • .net 读写ini
      封装win32 Api实现读写ini文件 提供读写缓存,避免频繁打开文件
    • 读写ini配置文件
      读写ini配置文件,利用API读写ini文件,存储一些配置参数。
    • go 读写ini
      go语言在linux下读写ini文件。代码齐全,必须先安装go
    • 读写ini文件
      c#编写的对ini格式的文档进行读、写,可以在窗体显示文本的内容
    • C++读写INI
      这是本人根据WINDOWS读写INI文件的API函数封装的一个INI读写类,分享给大家。
    • PHP读写INI文件
      下载了几个资源,功能不是很满意,于是写了这个,比较好的读写ini文件,让PHP也拥有asp Application一样的网站全局变量
    • java读写ini文件
      java读写ini文件的项目小例子。 运行类文件在根目录ini文件夹下src/com文件夹中start.java文件 相关jar包在根目录ini文件夹下bin文件夹中
    • C# 读写ini文件
      C# 读写ini文件C# 读写ini文件C# 读写ini文件C# 读写ini文件C# 读写ini文件C# 读写ini文件