当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 我在使用clearcase的时候遇到了一个问题,我使用的是2002版的,我在服务器上安装后,创建了vob,也创建了project,再创建了view,但我用clearcase explorer,选择add to source control时出现了以下错误: error adding the file "c:\text_testproject\abc" to sourc......
    摘要: 在查询分析器想在a表里面新增加enable字段 enable char(1) defaultt not null 是不是使用alter命令 请把代码写给我 谢谢 ......


关于.ini的使用原理,代码,示例,全都可以

我想用.ini进行一个简单用户管理!需要一些指导和示例·各位帮忙啊   !

NO.1   作者: saucer

用Visual   C++操作INI文件  
  http://www.yesky.com/20020123/215181.shtml

NO.2   作者: mfkzj

http://www.codeproject.com/cpp/ciniex.asp

NO.3   作者: chenybin

http://www.yesky.com/20020123/215181.shtml

NO.4   作者: westlingsnow

WritePrivateProfileString();  
  GetPrivateProfileString();  
  GetPrivateProfileInt();  
  主要是这几个函数了!

NO.5   作者: chen780831

void   CWritetxtDlg::ReadFromini()  
  {  
  const   char   *filename=strScadPath+"writetxt.ini";  
  CString   strFileName=strScadPath+"writetxt.ini";  
  CFile   file;  
  const   char   *section="SYSTEMINFO";  
  const   char   *key1="LoadDate";  
  const   char   *defaultstring1="10";  
  m_sysLoadDay=10;  
  const   char   *key2="ShowPreview";  
  const   char   *defaultstring2="Y";  
  m_sysShowPreview=true;  
  const   char   *key3="AtuoDeleteDay";  
  const   char   *defaultstring3="60";  
  m_sysAutoDeleteDay=60;  
           
  if(file.Open(strFileName,CFile::modeWrite))  
  {  
  file.Close();  
  char   buffer[10];  
  CString   temp;  
          GetPrivateProfileString(section,key1,defaultstring1,buffer,10,filename);  
  int   i=0;  
  while(buffer[i]!=NULL&&i<10)  
  {  
  temp+=buffer[i];  
  i++;  
  }  
  m_sysLoadDay=atoi(temp);  
                   
  temp="";  
  GetPrivateProfileString(section,key2,defaultstring2,buffer,10,filename);  
  i=0;  
  while(buffer[i]!=NULL&&i<10)  
  {  
  temp+=buffer[i];  
  i++;  
  }  
                  //AfxMessageBox(temp);    
                  if(strcmp(temp,"Y")==0)  
  m_sysShowPreview=true;  
  else  
  m_sysShowPreview=false;  
                   
  temp="";  
  GetPrivateProfileString(section,key3,defaultstring3,buffer,10,filename);  
  i=0;  
  while(buffer[i]!=NULL&&i<10)  
  {  
  temp+=buffer[i];  
  i++;  
  }  
                  m_sysAutoDeleteDay=atoi(temp);  
   
  }  
  else  
  {  
  if(file.Open(strFileName,CFile::modeCreate))  
  {  
  file.Close();    
  WritePrivateProfileString(section,key1,defaultstring1,filename);  
  WritePrivateProfileString(section,key2,defaultstring2,filename);  
  WritePrivateProfileString(section,key3,defaultstring3,filename);  
  }  
  }  
  }  
 

NO.6   作者: chen780831

void   CWritetxtDlg::WriteToini(int   intLoadDay,   int   intDelDay,   bool   blnPre)  
  {  
  m_sysAutoDeleteDay=intDelDay;  
  m_sysLoadDay=intLoadDay;  
  m_sysShowPreview=blnPre;  
          const   char   *filename=strScadPath+"writetxt.ini";  
  CString   strFileName=strScadPath+"writetxt.ini";  
  CFile   file;  
  CString   temp1,temp2;  
  const   char   *section="SYSTEMINFO";  
  const   char   *key1="LoadDate";  
  temp1.Format("%s%d","",intLoadDay);    
  const   char   *defaultstring1=temp1;  
   
   
  const   char   *key2="ShowPreview";  
  const   char   *defaultstring2="Y";  
  if(!blnPre)    
        defaultstring2="N";  
   
  const   char   *key3="AtuoDeleteDay";  
  temp2.Format("%s%d","",intDelDay);    
  const   char   *defaultstring3=temp2;  
          if(file.Open(strFileName,CFile::modeCreate))  
  {  
  file.Close();    
          WritePrivateProfileString(section,key1,defaultstring1,filename);  
          WritePrivateProfileString(section,key2,defaultstring2,filename);  
          WritePrivateProfileString(section,key3,defaultstring3,filename);  
          }    
  }

NO.7   作者: chen780831

void   CWritetxtDlg::WriteToini(int   intLoadDay,   int   intDelDay,   bool   blnPre)  
  {  
  m_sysAutoDeleteDay=intDelDay;  
  m_sysLoadDay=intLoadDay;  
  m_sysShowPreview=blnPre;  
          const   char   *filename=strScadPath+"writetxt.ini";  
  CString   strFileName=strScadPath+"writetxt.ini";  
  CFile   file;  
  CString   temp1,temp2;  
  const   char   *section="SYSTEMINFO";  
  const   char   *key1="LoadDate";  
  temp1.Format("%s%d","",intLoadDay);    
  const   char   *defaultstring1=temp1;  
   
   
  const   char   *key2="ShowPreview";  
  const   char   *defaultstring2="Y";  
  if(!blnPre)    
        defaultstring2="N";  
   
  const   char   *key3="AtuoDeleteDay";  
  temp2.Format("%s%d","",intDelDay);    
  const   char   *defaultstring3=temp2;  
          if(file.Open(strFileName,CFile::modeCreate))  
  {  
  file.Close();    
          WritePrivateProfileString(section,key1,defaultstring1,filename);  
          WritePrivateProfileString(section,key2,defaultstring2,filename);  
          WritePrivateProfileString(section,key3,defaultstring3,filename);  
          }    
  }

NO.8   作者: zm_hwx

贴子太长分两次:  
  ini.h:  
  //********************************************  
  // Ini   相关函数  
  //********************************************  
   
  #ifndef   _ROBOT_PET_INI_H_  
  #define   _ROBOT_PET_INI_H_  
   
  #define   ERROR_DATA   -99999999  
   
  //配置文件类  
  class   CIni{  
  private:  
  char   FileName[MAX_PATH];//文件名  
  int   DataLen; //文件长度  
  char   *Data; //文件内容  
   
  int   IndexNum; //索引数目  
  int   *IndexList; //索引点位置列表  
   
  int   Point; //当前指针  
  int   Line,   Word; //当前行列  
   
  public:  
  CIni();  
  CIni(char   *); //初始化打开配置文件  
  ~CIni(); //释放内存  
  char   *GetData(); //返回文件内容  
  int   GetLines(int); //返回文件的行数  
   
  bool   Open(char   *); //打开配置文件  
  bool   OpenInResource(int   Id); //从资源中读取  
  void   Close(); //关闭配置文件  
  bool   Save(char   *filename=NULL); //保存配置文件  
   
  private:  
  void   InitIndex(); //初始化索引  
  int   FindIndex(char   *); //返回标题位置  
  int   FindData(int,   char   *); //返回数据位置  
  int   GotoNextLine(int);   //提行  
  char   *ReadDataName(int   &); //在指定位置读一数据名称  
  char   *ReadText(int); //在指定位置读字符串  
   
  bool   AddIndex(char   *); //加入一个索引  
  bool   AddData(int,   char   *,   char   *); //在当前位置加入一个数据  
  bool   ModityData(int,   char   *,   char   *); //在当前位置修改一个数据的值  
   
  public:  
  int   ReadInt(char   *,   char   *); //读一个整数  
  int   ReadInt(char   *,   int   ); //在指定的行读一整数  
   
  char   *ReadText(char   *,   char   *); //读一个字符串  
  char   *ReadText(char   *,   int); //在指定的行读一字符串  
   
  char   *ReadCaption(char   *,   int); //在指定行读一字符名称  
   
  bool   Write(char   *,   char   *,   int); //写一个整数  
  bool   Write(char   *,   char   *,   char   *); //写一个字符串  
   
  int   GetContinueDataNum(char   *); //返回连续的行数  
  };  
   
  #endif  
 

NO.9   作者: zm_hwx

还是太长:分两次  
  /////////ini.cpp  
  //********************************************  
  // Ini   相关函数  
  //********************************************  
   
  #include   "stdafx.h"  
  #include   <stdio.h>  
  #include   <stdlib.h>  
  #include   <malloc.h>  
  #include   <io.h>  
  #include   <fcntl.h>  
  #include   "tools.h"  
  #include   "ini.h"  
  #include   <assert.h>  
   
  #ifdef   _DEBUG  
  #define   new   DEBUG_NEW  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]   =   __FILE__;  
  #endif  
   
  //初始化  
  CIni::CIni()  
  {  
  DataLen=0;  
  Data=NULL;  
  IndexNum=0;  
  IndexList=NULL;  
  }  
   
  //初始化  
  CIni::CIni(char   *filename)  
  {  
  DataLen=0;  
  Data=NULL;  
  IndexNum=0;  
  IndexList=NULL;  
  Open(filename);  
  }  
   
  //析构释放  
  CIni::~CIni()  
  {  
  if(   DataLen   !=   0   )  
  {  
  SAFE_DELETE(   Data   );  
  DataLen   =   0;  
  }  
   
  if(   IndexNum   !=   0   )  
  {  
  SAFE_DELETE(   IndexList   );  
  IndexNum   =   0;  
  }  
  }  
   
  //读入文件  
  bool   CIni::Open(char   *filename)  
  {  
  strcpy(FileName,   filename);  
   
  SAFE_FREE(   Data   );  
   
  DataLen=GetFileLength(filename); //获取文件长度  
  if(   DataLen   >   0   ) //文件存在  
  {  
  Data=new   char[DataLen];  
   
  FILE   *fp;  
  fp=fopen(filename,   "rb");  
  assert(   fp!=NULL   );  
  fread(Data,   DataLen,   1,   fp); //读数据  
  fclose(fp);  
   
  //初始化索引  
  InitIndex();  
  }  
  else  
  {  
  DataLen=1;  
  Data=new   char[DataLen];  
  memset(Data,   0,   1);  
  InitIndex();  
  }  
   
  return   false;  
  }  
   
  //从资源中读取  
  bool   CIni::OpenInResource(int   Id)  
  {  
  CString   str;  
  str.LoadString(Id);  
  DataLen   =   str.GetLength();  
   
  //释放以前的  
  SAFE_FREE(   Data   );  
   
  Data=new   char[DataLen];  
  memset(Data,   0,   DataLen);  
   
  //读数据  
  strcpy(Data,   str);  
   
  //初始化索引  
  InitIndex();  
   
  return   true;  
  }  
   
  //关闭文件  
  void   CIni::Close()  
  {  
  if(   DataLen   !=   0   )  
  {  
  SAFE_DELETE(   Data   );  
  DataLen   =   0;  
  }  
   
  if(   IndexNum   !=   0   )  
  {  
  SAFE_DELETE(   IndexList   );  
  IndexNum   =   0;  
  }  
  }  
   
  //写入文件  
  bool   CIni::Save(char   *filename)  
  {  
  if(   filename==NULL   )  
  filename=FileName;  
   
  FILE   *fp;  
  fp=fopen(filename,   "wb");  
  assert(   fp!=NULL   );  
   
  //fprintf(fp,"%s",Data);  
  fwrite(Data,   DataLen,   1,   fp);  
  fclose(fp);  
   
  return   true;  
  }  
   
  //计算出所有的索引位置  
  void   CIni::InitIndex()  
  {  
  IndexNum=0;  
   
  for(int   i=0;   i<DataLen;   i++)  
  {  
  //找到  
  if(   Data[i]==[   &&   (Data[i-1]==\n   ||   i==0)   )  
  {  
  IndexNum++;  
  }  
  }  
   
  //申请内存  
  SAFE_DELETE(   IndexList   );  
  if(   IndexNum>0   )  
  IndexList=new   int[IndexNum];  
   
  int   n=0;  
   
  for(i=0;   i<DataLen;   i++)  
  {  
  if(   Data[i]==[   &&   (Data[i-1]==\n   ||   i==0)   )  
  {  
  IndexList[n]=i+1;  
  n++;  
  }  
  }  
  }  
   
  /////////////////////////////////////////////////////////////////////  
  //  
  /////////////////////////////////////////////////////////////////////  
   
  //返回指定标题位置  
  int   CIni::FindIndex(char   *string)  
  {  
  for(int   i=0;   i<IndexNum;   i++)  
  {  
  char   *str=ReadText(   IndexList[i]   );  
  if(   strcmp(string,   str)   ==   0   )  
  {  
  SAFE_FREE(   str   );  
  return   IndexList[i];  
  }  
  SAFE_FREE(   str   );  
  }  
  return   -1;  
  }  
   
  //返回指定数据的位置  
  int   CIni::FindData(int   index,   char   *string)  
  {  
  int   p=index; //指针  
   
  while(1)  
  {  
  p=GotoNextLine(p);  
  char   *name=ReadDataName(p);  
  if(   strcmp(string,   name)==0   )  
  {  
  SAFE_FREE(   name   );  
  return   p;  
  }  
   
  SAFE_FREE(   name   );  
  if(   p>=DataLen   )   return   -1;  
  }  
  return   -1;  
  }  
   
  //提行  
  int   CIni::GotoNextLine(int   p)  
  {  
  for(int   i=p;   i<DataLen;   i++)  
  {  
  if(   Data[i]==\n   )  
  return   i+1;  
  }  
  return   i;  
  }  
   
  //在指定位置读一数据名称  
  char   *CIni::ReadDataName(int   &p)  
  {  
  char   chr;  
  char   *Ret;  
  int   m=0;  
   
  Ret=(char   *)malloc(64);  
  memset(Ret,   0,   64);  
   
  for(int   i=p;   i<DataLen;   i++)  
  {  
  chr=Data[i];  
   
  //结束  
  if(   chr   ==   \r   )  
  {  
  p=i+1;  
  return   Ret;  
  }  
   
  //结束  
  if(   chr   ==   =   ||   chr   ==   ;   )  
  {  
  p=i+1;  
  return   Ret;  
  }  
   
  Ret[m]=chr;  
  m++;  
  }  
  return   Ret;  
  }  
   
  //在指定位置读一字符串  
  char   *CIni::ReadText(int   p)  
  {  
  char   chr;  
  char   *Ret;  
  int   n=p,   m=0;  
   
  int   EndLine=GotoNextLine(p);  
  Ret=(char   *)malloc(EndLine-p+1);  
  memset(Ret,   0,   EndLine-p+1);  
   
  for(int   i=0;   i<DataLen-p;   i++)  
  {  
  chr=Data[n];  
   
  //结束  
  if(   chr   ==   ;   ||   chr   ==   \r   ||   chr   ==   \t   ||   chr   ==   ]   ||   chr   ==   \n)  
  {  
  //ShowMessage(Ret);  
  return   Ret;  
  }  
   
  Ret[m]=chr;  
  m++;  
  n++;  
  }  
  return   Ret;  
  }  
   
  /////////////////////////////////////////////////////////////////////  
  //  
  /////////////////////////////////////////////////////////////////////  
   
  //加入一个索引  
  bool   CIni::AddIndex(char   *index)  
  {  
  char   str[256];  
  memset(str,   0,   256);  
  int   n=FindIndex(index);  
   
  if(   n   ==   -1   ) //新建索引  
  {  
  sprintf(str,"\r\n[%s]\r\n",index);  
  Data=(char   *)realloc(Data,   DataLen+strlen(str)); //重新分配内存  
  sprintf(&Data[DataLen],   "%s",   str);  
  DataLen+=strlen(str);  
   
  InitIndex();  
  return   true;  
  }  
   
  return   false; //已经存在  
  }  
   
  //在当前位置加入一个数据  
  bool   CIni::AddData(int   p,   char   *name,   char   *string)  
  {  
  char   *str;  
  int   len=strlen(string);  
  str=new   char[len+256];  
  memset(str,   0,   len+256);  
  sprintf(str,"%s=%s\r\n",name,string);  
  len=strlen(str);  
   
  p=GotoNextLine(p); //提行  
  Data=(char   *)realloc(Data,   DataLen+len); //重新分配内存  
   
  char   *temp=new   char[DataLen-p];  
  memcpy(temp,   &Data[p],   DataLen-p);  
  memcpy(&Data[p+len],   temp,   DataLen-p); //把后面的搬到末尾  
  memcpy(&Data[p],   str,   len);  
  DataLen+=len;  
   
  SAFE_DELETE(   temp   );  
  SAFE_DELETE(   str   );  
  return   true;  
  }  
 

NO.10   作者: zm_hwx

 
  //在当前位置修改一个数据的值  
  bool   CIni::ModityData(int   p,   char   *name,   char   *string)  
  {  
  int   n=FindData(p,   name);  
   
  char   *t=ReadText(n);  
  p=n+strlen(t);  
  if(   strlen(t)>0   )   free(t);  
   
  int   newlen=strlen(string);  
  int   oldlen=p-n;  
   
  Data=(char   *)realloc(Data,   DataLen+newlen-oldlen); //重新分配内存  
   
  char   *temp=new   char[DataLen-p];  
  memcpy(temp,   &Data[p],   DataLen-p);  
  memcpy(&Data[n+newlen],   temp,   DataLen-p); //把后面的搬到末尾  
  memcpy(&Data[n],   string,   newlen);  
  DataLen+=newlen-oldlen;  
   
  SAFE_DELETE(   temp   );  
  return   true;  
  }  
   
  //返回文件内容  
  char   *CIni::GetData()  
  {  
  return   Data;  
  }  
   
  //获得文件的行数  
  int   CIni::GetLines(int   cur)  
  {  
  int   n=1;  
  for(int   i=0;   i<cur;   i++)  
  {  
  if(   Data[i]==\n   )  
  n++;  
  }  
  return   n;  
  }  
   
  /////////////////////////////////////////////////////////////////////  
  //   对外接口  
  /////////////////////////////////////////////////////////////////////  
   
  //以普通方式读一字符串数据  
  char   *CIni::ReadText(char   *index,   char   *name)  
  {  
  int   n=FindIndex(index);  
  assert(   n   !=   -1   );  
   
  int   m=FindData(n,   name);  
  assert(   m   !=   -1   );  
   
  return   ReadText(m);  
  }  
   
  //在指定的行读一字符串  
  char   *CIni::ReadText(char   *index,   int   lines)  
  {  
  int   n=FindIndex(index);  
  assert(   n   !=   -1   );  
   
  //跳到指定行数  
  n=GotoNextLine(n);  
  for(int   i=0;   i<lines;   i++)  
  {  
  if(   n<DataLen   )  
  n=GotoNextLine(n);  
  }  
   
  //读数据  
  while(   n<=DataLen   )  
  {  
  if(   Data[n]   ==   =   )  
  {  
  n++;  
  return   ReadText(n);  
  }  
  if(   Data[n]   ==   \r   )  
  {  
  return   "";  
  }  
  n++;  
  }  
   
  return   "";  
  }  
   
  //以普通方式读一整数  
  int   CIni::ReadInt(char   *index,   char   *name)  
  {  
  int   n=FindIndex(index);  
  assert(   n   !=   -1   );  
   
  int   m=FindData(n,   name);  
  assert(   m   !=   -1   );  
   
  char   *str=ReadText(m);  
  int   ret=atoi(str);  
  free(str);  
  return   ret;  
  }  
   
  //在指定的行读一整数  
  int   CIni::ReadInt(char   *index,   int   lines)  
  {  
  int   n=FindIndex(index);  
  assert(   n   !=   -1   );  
   
  //跳到指定行数  
  n=GotoNextLine(n);  
  for(int   i=0;   i<lines;   i++)  
  {  
  if(   n<DataLen   )  
  n=GotoNextLine(n);  
  }  
   
  //读数据  
  while(   n<DataLen   )  
  {  
  if(   Data[n]   ==   =   )  
  {  
  n++;  
  char   *str=ReadText(n);  
  int   ret=atoi(str);  
  free(str);  
  return   ret;  
  }  
  if(   Data[n]   ==   \r   )  
  {  
  return   ERROR_DATA;  
  }  
  n++;  
  }  
   
  return   ERROR_DATA;  
  }  
   
  //在指定的行读一数据名称  
  char   *CIni::ReadCaption(char   *index,   int   lines)  
  {  
  int   n=FindIndex(index);  
  assert(   n   !=   -1   );  
   
  //跳到指定行数  
  n=GotoNextLine(n);  
  for(int   i=0;   i<lines;   i++)  
  {  
  if(   n<DataLen   )  
  n=GotoNextLine(n);  
  }  
   
  return   ReadDataName(n);  
  }  
   
  //以普通方式写一字符串数据  
  bool   CIni::Write(char   *index,   char   *name,   char   *string)  
  {  
  int   n=FindIndex(index);  
  if(   n   ==   -1   ) //新建索引  
  {  
  AddIndex(index);  
  n=FindIndex(index);  
  AddData(n,   name,   string); //在当前位置n加一个数据  
  return   true;  
  }  
   
  //存在索引  
  int   m=FindData(n,   name);  
  if(   m==-1   ) //新建数据  
  {  
  AddData(n,   name,   string); //在当前位置n加一个数据  
  return   true;  
  }  
   
  //存在数据  
  ModityData(n,   name,   string); //修改一个数据  
   
  return   true;  
  }  
   
  //以普通方式写一整数  
  bool   CIni::Write(char   *index,   char   *name,   int   num)  
  {  
  char   string[32];  
  sprintf(string,   "%d",   num);  
   
  int   n=FindIndex(index);  
  if(   n   ==   -1   ) //新建索引  
  {  
  AddIndex(index);  
  n=FindIndex(index);  
  AddData(n,   name,   string); //在当前位置n加一个数据  
  return   true;  
  }  
   
  //存在索引  
  int   m=FindData(n,   name);  
  if(   m==-1   ) //新建数据  
  {  
  AddData(n,   name,   string); //在当前位置n加一个数据  
  return   true;  
  }  
   
  //存在数据  
  ModityData(n,   name,   string); //修改一个数据  
   
  return   true;  
  }  
   
  //返回连续的行数  
  int   CIni::GetContinueDataNum(char   *index)  
  {  
  int   num=0;  
  int   n=FindIndex(index);  
  n=GotoNextLine(n);  
  while(1)  
  {  
  if(   Data[n]   ==   \r   ||   Data[n]   ==   EOF   ||   Data[n]   ==   -3   ||   Data[n]   ==       ||   Data[n]   ==   /   ||   Data[n]   ==   \t   ||   Data[n]   ==   \n   )  
  {  
  return   num;  
  }  
  else  
  {  
  num++;  
  n=GotoNextLine(n);  
  if(   n   >=   DataLen   )   return   num;  
  }  
  }  
  }  
 


 ·acess移植遇到的问题.    »显示摘要«
    摘要: 把access2.0移植到access2002.碰到了一个非常奇怪的问题. 在access2.0下读入report中的数据是正常的, access2002读入的数据小数部分被不正常的截取了 .为什么? ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE