CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

读ini文件时写了个类。出现问题。

楼主cranley(狼)2005-06-02 08:19:04 在 VC/MFC / 基础类 提问

#include   "StdAfx.h"  
  #include   ".\ini.h"  
  CIni::CIni(CString   filepathname)  
  {  
  m_file.Open(filepathname,CFile::modeReadWrite);  
  bool   ok=true;  
  if(m_file.m_hFile==(HANDLE)-1)  
  {  
  if(!m_file.Open(filepathname,CFile::modeCreate|CFile::modeReadWrite))  
  ok=false;  
  }  
  if(ok)  
  {  
  CString   str;  
  while(m_file.ReadString(str))  
  {  
   
  if(str!="")  
  m_fileContent.Add(str);  
  }  
  }  
  m_index=-1;  
  }  
   
  CIni::~CIni(void)  
  {  
  if(m_file.m_hFile!=(HANDLE)-1)  
  {  
  m_file.SeekToBegin();  
  for(int   i=0;i<m_fileContent.GetSize();i++)  
  {  
  CString   str;  
  str=m_fileContent.GetAt(i);  
  str.Trim();  
   
  if(!Test(str))  
  AfxMessageBox(str);  
  str+='\012';  
  m_file.WriteString(str);  
  }  
  m_file.Close();  
  }  
   
  }  
  bool   CIni::SetIndex(CString   indexname,bool   bCreate)  
  {  
  if(indexname=="")  
  return   false;  
  if(m_file.m_hFile==(HANDLE)-1)  
  return   false;  
  CString   str;  
  for(int   i=0;i<m_fileContent.GetSize();i++)  
  {  
  CString   str=m_fileContent.GetAt(i);  
  int   start=str.Find("[");  
  int   end=str.Find("]");  
  if(start<0||end<0)continue;  
  CString   indextemp=str.Mid(start+1,end-start-1);  
  if(indextemp=="")  
  return   false;  
  CString   indexname1=indexname.MakeUpper();  
  CString   indextemp1=indextemp.MakeUpper();  
  if(!indextemp1.Compare(indexname1))  
  {  
  m_index=i+1;  
  CString   temp;  
  temp.Format("%d",m_index);  
  return   true;  
  }  
  }  
   
  if(bCreate)  
  {  
  CString   temp="[";  
  temp+=indexname;  
  temp+="]";  
  m_fileContent.Add(temp);  
  if(i!=0)  
  m_index=i;  
  else  
  m_index=1;  
  return   true;  
  }  
  return   false;  
   
  }  
  CString   CIni::ReadString(CString   strparam)  
  {  
  if(m_file.m_hFile==(HANDLE)-1)  
  return   NULL;  
  if(m_index==-1)  
  {  
  AfxMessageBox("索引值为空");  
  return   NULL;  
  }  
  CString   str;  
  for(int   i=m_index;i<m_fileContent.GetSize();i++)  
  {  
  CString   str=m_fileContent.GetAt(i);  
  if(str.Find("[")>-1)  
  {  
  return   NULL;  
  }  
  int   index=str.Find("=");  
  if(index<1)  
  continue;  
  CString   right=str.Mid(index+1,str.GetLength()-index-1);  
  CString   left=str.Mid(0,index);  
  if(!left.Compare(strparam))  
  {  
  return   right;  
  }  
  }  
  return   NULL;  
  }  
  int   CIni::ReadNumber(CString   strparam)  
  {  
  CString   str;  
  str=ReadString(strparam);  
  if(str=="")  
  return   NULL;  
  return   atoi(str);  
  }  
  bool   CIni::WriteString(CString   paramname,CString   value)  
  {  
  CString   temp1;  
  temp1.Format("   WriteString     %d\n",value.GetLength());  
  TRACE(value+temp1);  
  if(m_file.m_hFile==(HANDLE)-1)  
  return   false;  
  if(m_index==-1)  
  {  
  AfxMessageBox("索引值为空");  
  return   false;  
  }  
  CString   str;  
  CString   laststr;  
  CString   result=paramname;  
  result+="=";  
  result+=value;  
  for(int   i=m_index;i<m_fileContent.GetSize();i++)  
  {  
  CString   str=m_fileContent.GetAt(i);  
  if(str.Find("[")>-1)  
  {  
  CString   temp;  
  temp.Format("%d",m_index);  
  temp+="   "+result;  
  m_fileContent.InsertAt(m_index,result);  
  return   true;  
  }  
  int   index=str.Find("=");  
  if(index<1)  
  continue;  
  CString   left=str.Mid(0,index);  
  if(!left.Compare(paramname))  
  {  
  m_fileContent.RemoveAt(i);  
  m_fileContent.InsertAt(i,result);  
  CString   temp;  
  temp.Format("%d",result.GetLength());  
  temp+="   "+result;  
  TRACE(temp);  
  return   true;  
  }  
  }  
  CString   temp;  
  temp.Format("%d",m_index);  
  temp+="   "+result;  
  m_fileContent.InsertAt(m_index,result);  
  return   true;  
           
   
  }  
  bool   CIni::WriteNumber(CString   paramname,int   value)  
  {  
  CString   result;  
  result.Format("%d",value);  
  return   WriteString(paramname,result);  
  }  
  bool   CIni::Test(CString   str)//测试函数  
  {  
  bool   ret=true;  
  for(int   i=0;i<str.GetLength();i++)  
  {  
  int   d=str.GetAt(i);  
  TRACE((char)d+"   ");  
  if(d<0||d==10||d==13)  
  ret=false;  
  }  
  return   ret;  
  }  
   
  以上是这个类的CPP代码。H代码就没有必要了。  
  使用时,经常出现"\r"   "\0"符号的捣乱。甚至出现用GetAt得到负值的字符(汉字);  
  请高手研究一下,谢谢  
   
   
  问题点数:0、回复次数:6Top

1 楼laiyiling(陌生人[MVP])回复于 2005-06-02 08:24:35 得分 0

http://dev.csdn.net/develop/article/25/25860.shtm  
  http://dev.csdn.net/develop/article/26/26342.shtmTop

2 楼xmxjh(程序员)回复于 2005-06-02 08:30:56 得分 0

我觉得如果不是练习数据据结构的话,用API非常方便  
  GetPrivateProfileString("BOX",sKeyWord,"",sIMEI,nSize,FileName);//读字符串  
  GetPrivateProfileInt("BOX","NO",0,FileName);//读整型值Top

3 楼cranley(狼)回复于 2005-06-02 09:11:49 得分 0

请各位研究一下呵。  
  对你我都有帮助Top

4 楼aben456(金珠MERP)回复于 2005-06-02 09:52:10 得分 0

getat为负数应该正常Top

5 楼cranley(狼)回复于 2005-06-04 16:51:32 得分 0

为负数应该不正常,因为我测试时用的都是ASCIITop

6 楼cranley(狼)回复于 2005-06-13 11:35:54 得分 0

没人帮我测试一下啊。这么久了。Top

相关问题

  • 读ini文件出现的问题
  • About .ini 文件
  • *.ini文件
  • windows INI文件
  • INI 文件?
  • ini文件?
  • ini文件
  • ini文件
  • delphi调用INI文件出现错误,有谁能帮帮我
  • 文件操作类,出现错误

关键词

  • cini
  • filepathname
  • cfile
  • cstring
  • ok
  • str
  • temp

得分解答快速导航

  • 帖主:cranley

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo