随笔 - 514, 文章 - 0, 评论 - 921, 引用 - 0
数据加载中……

vc读取INI文件(原创,简单,实用,注释详细)

近来整理一下资料,把有些东西归类一下。

需要读写ini文件的资料。网上找了两个。

第一个,是.h和.cpp版本不同。

第二个,函数声明太含糊,不方便使用者调用。

索性花点时间自己写一个。(首先确定,一定要简单实用,别人一看就明白。)

完整工程:http://zhmster.googlepages.com/opini.rar


提醒注意:ini文件和exe文件必须在同个目录。 

 

// OPini.h: interface for the COPini class.
//

//
//////////////////////////////////////////////////////////////////// 

// ***************************************************************
//  OPini   version:  1.0   ? date: 07/19/2007
//  -------------------------------------------------------------
//  这个类用来读取exe下ini文件的内容。
//  -------------------------------------------------------------
//  Copyright (C) 2007 - All Rights Reserved
// ***************************************************************
// 
// *************************************************************** 


#if !defined(AFX_OPINI_H__CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063__INCLUDED_)
#
define AFX_OPINI_H__CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063__INCLUDED_ 

#if _MSC_VER > 1000
#
pragma once
#
endif // _MSC_VER > 1000 

#include <afxwin.h> 

class COPini  
{
public:
    
static DWORD ReadString (char *section, char * key,  char stringtoread[],  char * filename);
    
static BOOL WriteString(LPCTSTR section, LPCTSTR key,char* stringtoadd, char *filename);
    COPini();
    
virtual ~COPini(); 

}; 

#endif // !defined(AFX_OPINI_H__CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063__INCLUDED_) 




// OPini.cpp: implementation of the COPini class.
//

//
//////////////////////////////////////////////////////////////////// 

#include "OPini.h" 

/********************************************************************
    created:    2007/07/19
    created:    19:7:2007   10:13
    filename:     OPini.cpp
    file path:    
    file base:    OPini
    file ext:    cpp
    author:        alantop
    purpose:    读取INI文件。
********************************************************************
*/ 

//////////////////////////////////////////////////////////////////////
// Construction/Destruction

//
//////////////////////////////////////////////////////////////////// 

COPini
::COPini()
{


COPini
::~COPini()
{
}
/*****************************************************************************
Function:       // 
Description:    // 写字符串到INI文件
Calls:          // 
Called By:      // 
Table Accessed: // 
Table Updated:  // 
Input:          // 
Output:         // 
Return:         // 成功返回真,失败返回假.失败后,可用DWORD GetLastError(VOID)
                   查询失败原因。
Others:         // 
author:         // alantop
date:           // 2007.07.19
*****************************************************************************
*/
/*
void error(LPSTR lpszFunction) 

    CHAR szBuf[80]; 
    DWORD dw = GetLastError(); 
    sprintf(szBuf, "%s failed: GetLastError returned %u\n", 
        lpszFunction, dw); 
    MessageBox(NULL, szBuf, "Error", MB_OK); 
    ExitProcess(dw); 


*/
BOOL COPini
::WriteString(LPCTSTR section, LPCTSTR key, char *stringtoadd, char *filename)
{
    CHAR FilePath[
255]; 
    GetModuleFileName(
NULL,FilePath,255); 
    
//Scan a string for the last occurrence of a character.
    (strrchr(FilePath,'\\'))[1= 0
    strcat(FilePath
,filename);
    
return ::WritePrivateProfileString(section,key,stringtoadd,FilePath);


/*****************************************************************************
Function:       // 
Description:    // 从INI文件中读取字符串
Calls:          // 
Called By:      // 
Table Accessed: // 
Table Updated:  // 
Input:          // 
Output:         // 
Return:         // 读取了多少个字节的字符
Others:         // 
author:         // alantop
date:           // 2007.07.19
*****************************************************************************
*/
DWORD COPini
::ReadString(char *section, char * key,  char stringtoread[],  char * filename)
{
    CHAR FilePath[
255]; 
    GetModuleFileName(
NULL,FilePath,255); 
    (
strrchr(FilePath,'\\'))[1= 0
    strcat(FilePath
,filename);
    
return ::GetPrivateProfileString(section, key,NULL,stringtoread,255,FilePath);



 

 示例:

#include <stdio.h>
#
include "opini.h" 

void main()
{
    char stringtoread[
200];
    COPini
::ReadString("group", "item", stringtoread, "test.ini");
    char stringtoadd[] 
= "hello1";
    COPini
::WriteString("group", "item",  stringtoadd, "test.ini");
    
return;
}

posted on 2007-07-19 10:28 AlanTop 阅读(8803) 评论(8)  编辑 收藏 引用 所属分类: VC++

评论

# re: vc读取INI文件(原创,简单,实用,注释详细)  回复  更多评论   

thanks

zheng zhao ne
2007-07-19 13:32 | d o m o l o

# re: vc读取INI文件(原创,简单,实用,注释详细)  回复  更多评论   

不客气,有什么建议。可以提提!
2007-07-19 14:08 | AlanTop

# re: vc读取INI文件(原创,简单,实用,注释详细)[未登录]  回复  更多评论   

没做什么封装啊,对读写大个ini文件效率太低
2007-07-19 22:32 | l

# re: vc读取INI文件(原创,简单,实用,注释详细)  回复  更多评论   

微软自带的读ini的函数效率很低的,读一个之后,函数不知道你还要不要读,所以每次都会打开文件进行读写。
现在我们的处理方式是一次性将ini文件读到内存里面,保存成一个映射表,需要用的时候在内存里面操作就可以了。
2007-07-20 13:55 | wonder_wj

# re: vc读取INI文件(原创,简单,实用,注释详细)  回复  更多评论   

2007-07-24 10:12 | 黄大仙

# re: vc读取INI文件(原创,简单,实用,注释详细)  回复  更多评论   

有什么封装么?

只不过把文件名和当前路径连接了下,还是调用的GetPrivateProfileString()函数。

恕我眼拙,我怎么没看出那句话是把文件读入到内存的,还保存成映射表??
2007-08-07 14:55 | abc

# re: vc读取INI文件(原创,简单,实用,注释详细)  回复  更多评论   

说的有点科学道理。
2007-08-07 15:18 | AlanTop

# re: vc读取INI文件(原创,简单,实用,注释详细)  回复  更多评论   

无话可说。
2008-07-09 16:43 | 小婉

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理