Thanks
8 个解决方案
#1
给你一个头文件
#include "stdafx.h"
#include "windows.h"
#define FunOk 0
#define FunFail -1
// ini文件操作类
class CIniFiles{
private:
CString sFileName;
public:
CIniFiles( CString I_FileName );
~CIniFiles();
void ReadString( CString I_SectionName,
CString I_KeyName,
CString *O_KeyValue );
void ReadInteger( CString I_SectionName,
CString I_KeyName,
int &O_KeyValue );
int WriteString( CString I_SectionName,
CString I_KeyName,
CString I_KeyValue );
int WriteInteger( CString I_SectionName,
CString I_KeyName,
int I_KeyValue );
};
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline CIniFiles::CIniFiles( CString I_FileName )
// ini文件类构造函数
{
sFileName = I_FileName;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline void CIniFiles::ReadString( CString I_SectionName,
CString I_KeyName,
CString *O_KeyValue )
// ini文件类读块中某关键字的值的函数(字符串型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
*O_KeyValue,
result,
Totalsize,
sFileName);
*O_KeyValue = result;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline void CIniFiles::ReadInteger( CString I_SectionName,
CString I_KeyName,
int &O_KeyValue )
// ini文件类读块中某关键字的值的函数(整型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
"",
result,
Totalsize,
sFileName);
if ( result != "")
O_KeyValue = atoi(result);
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline int CIniFiles::WriteString( CString I_SectionName,
CString I_KeyName,
CString I_KeyValue )
// ini文件类写块中某关键字的值的函数(字符串型)
{
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
I_KeyValue,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline int CIniFiles::WriteInteger( CString I_SectionName,
CString I_KeyName,
int I_KeyValue )
// ini文件类写块中某关键字的值的函数(整型)
{
char tempkey[24];
CString temps;
_itoa( I_KeyValue,tempkey,10);
temps = tempkey;
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
temps,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline CIniFiles::~CIniFiles()
// ini文件类析构函数
{
sFileName = "";
}
#include "stdafx.h"
#include "windows.h"
#define FunOk 0
#define FunFail -1
// ini文件操作类
class CIniFiles{
private:
CString sFileName;
public:
CIniFiles( CString I_FileName );
~CIniFiles();
void ReadString( CString I_SectionName,
CString I_KeyName,
CString *O_KeyValue );
void ReadInteger( CString I_SectionName,
CString I_KeyName,
int &O_KeyValue );
int WriteString( CString I_SectionName,
CString I_KeyName,
CString I_KeyValue );
int WriteInteger( CString I_SectionName,
CString I_KeyName,
int I_KeyValue );
};
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline CIniFiles::CIniFiles( CString I_FileName )
// ini文件类构造函数
{
sFileName = I_FileName;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline void CIniFiles::ReadString( CString I_SectionName,
CString I_KeyName,
CString *O_KeyValue )
// ini文件类读块中某关键字的值的函数(字符串型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
*O_KeyValue,
result,
Totalsize,
sFileName);
*O_KeyValue = result;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline void CIniFiles::ReadInteger( CString I_SectionName,
CString I_KeyName,
int &O_KeyValue )
// ini文件类读块中某关键字的值的函数(整型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
"",
result,
Totalsize,
sFileName);
if ( result != "")
O_KeyValue = atoi(result);
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline int CIniFiles::WriteString( CString I_SectionName,
CString I_KeyName,
CString I_KeyValue )
// ini文件类写块中某关键字的值的函数(字符串型)
{
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
I_KeyValue,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline int CIniFiles::WriteInteger( CString I_SectionName,
CString I_KeyName,
int I_KeyValue )
// ini文件类写块中某关键字的值的函数(整型)
{
char tempkey[24];
CString temps;
_itoa( I_KeyValue,tempkey,10);
temps = tempkey;
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
temps,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline CIniFiles::~CIniFiles()
// ini文件类析构函数
{
sFileName = "";
}
#2
CWinApp有四个成员函数用来读写INI文件:
GetProfileString,WriteProfileString,
GetProfileInt,WriteProfileInt
以下是在MSDN找到的范例:
CString strSection = "My Section";
CString strStringItem = "My String Item";
CString strIntItem = "My Int Item";
CWinApp* pApp = AfxGetApp();
pApp->WriteProfileString(strSection, strStringItem, "test");
CString strValue;
strValue = pApp->GetProfileString(strSection, strStringItem);
ASSERT(strValue == "test");
pApp->WriteProfileInt(strSection, strIntItem, 1234);
int nValue;
nValue = pApp->GetProfileInt(strSection, strIntItem, 0);
ASSERT(nValue == 1234);
#3
你在MSDN的索引中输入:
LoadPrivateProfile……能找到读INI文件的函数,如LoadPrivateProfileSection等等。
WritePrivateProfil……能找到写INI文件的函数,如WritePrivateProfileString等等。
这些都是些API函数,还有就是dzl所述CWinApp的成员函数也很好用。不过有可能会被写到注册表中。
其实微软更推荐把程序的设置放到注册表中。怎么办,看你自己的需要吧。
LoadPrivateProfile……能找到读INI文件的函数,如LoadPrivateProfileSection等等。
WritePrivateProfil……能找到写INI文件的函数,如WritePrivateProfileString等等。
这些都是些API函数,还有就是dzl所述CWinApp的成员函数也很好用。不过有可能会被写到注册表中。
其实微软更推荐把程序的设置放到注册表中。怎么办,看你自己的需要吧。
#4
我是想读取ini文件,而不是读取注册表中的文件,我使用了hellsun的程序,但发现什么也没有取出来,请问为什么?
#5
我把hellsun的程序改了改,調試通過了!
//iniFiles.h
#ifndef __INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
#define __INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
#define FunOk 0
#define FunFail -1
// ini文件操作?
class CIniFiles
{
private:
CString sFileName;
public:
CIniFiles( LPCTSTR I_FileName);
~CIniFiles();
void ReadString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
CString& O_KeyValue );
void ReadInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int &O_KeyValue );
int WriteString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
LPCTSTR I_KeyValue );
int WriteInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int I_KeyValue );
};
#endif //__INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
//iniFiles.cpp
#include "stdafx.h"
#include "iniFiles.h"
CIniFiles::CIniFiles( LPCTSTR I_FileName)
// ini文件?构造函?
{
sFileName = I_FileName;
if (sFileName.Find('\\') < 0)
{
char sOldDir[MAX_PATH];
GetCurrentDirectory(MAX_PATH, sOldDir);
sFileName = sOldDir;
sFileName += "\\";
sFileName += I_FileName;
}
}
void CIniFiles::ReadString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
CString& O_KeyValue )
// ini文件???中某??字的值的函?(字符串型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
O_KeyValue,
result,
Totalsize,
sFileName);
O_KeyValue = result;
delete[] result;
}
void CIniFiles::ReadInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int &O_KeyValue )
// ini文件???中某??字的值的函?(整型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
"",
result,
Totalsize,
sFileName);
if ( result != "")
O_KeyValue = atoi(result);
delete[] result;
}
int CIniFiles::WriteString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
LPCTSTR I_KeyValue )
// ini文件???中某??字的值的函?(字符串型)
{
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
I_KeyValue,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
int CIniFiles::WriteInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int I_KeyValue )
// ini文件???中某??字的值的函?(整型)
{
char tempkey[24];
CString temps;
_itoa( I_KeyValue,tempkey,10);
temps = tempkey;
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
temps,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
CIniFiles::~CIniFiles()
// ini文件?析构函?
{
sFileName = "";
}
//iniFiles.h
#ifndef __INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
#define __INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
#define FunOk 0
#define FunFail -1
// ini文件操作?
class CIniFiles
{
private:
CString sFileName;
public:
CIniFiles( LPCTSTR I_FileName);
~CIniFiles();
void ReadString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
CString& O_KeyValue );
void ReadInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int &O_KeyValue );
int WriteString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
LPCTSTR I_KeyValue );
int WriteInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int I_KeyValue );
};
#endif //__INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
//iniFiles.cpp
#include "stdafx.h"
#include "iniFiles.h"
CIniFiles::CIniFiles( LPCTSTR I_FileName)
// ini文件?构造函?
{
sFileName = I_FileName;
if (sFileName.Find('\\') < 0)
{
char sOldDir[MAX_PATH];
GetCurrentDirectory(MAX_PATH, sOldDir);
sFileName = sOldDir;
sFileName += "\\";
sFileName += I_FileName;
}
}
void CIniFiles::ReadString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
CString& O_KeyValue )
// ini文件???中某??字的值的函?(字符串型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
O_KeyValue,
result,
Totalsize,
sFileName);
O_KeyValue = result;
delete[] result;
}
void CIniFiles::ReadInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int &O_KeyValue )
// ini文件???中某??字的值的函?(整型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
"",
result,
Totalsize,
sFileName);
if ( result != "")
O_KeyValue = atoi(result);
delete[] result;
}
int CIniFiles::WriteString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
LPCTSTR I_KeyValue )
// ini文件???中某??字的值的函?(字符串型)
{
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
I_KeyValue,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
int CIniFiles::WriteInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int I_KeyValue )
// ini文件???中某??字的值的函?(整型)
{
char tempkey[24];
CString temps;
_itoa( I_KeyValue,tempkey,10);
temps = tempkey;
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
temps,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
CIniFiles::~CIniFiles()
// ini文件?析构函?
{
sFileName = "";
}
#6
必须先用构造函数指定要打开的文件(含全路径)
CIniFiles Ini("4.rul");
int tt;
Ini.ReadInteger("Public","DataNum",tt);
return;
大小写敏感
CIniFiles Ini("4.rul");
int tt;
Ini.ReadInteger("Public","DataNum",tt);
return;
大小写敏感
#7
注意,你读取时是否分配了内存区。
可以用以下例子试试:
char s[255];
GetPrivateProfileString("AppName","KeyName","",s,255,"文件路径名"
可以用以下例子试试:
char s[255];
GetPrivateProfileString("AppName","KeyName","",s,255,"文件路径名"
#8
分数虽然少了一些,但代表我对各位的感谢
#1
给你一个头文件
#include "stdafx.h"
#include "windows.h"
#define FunOk 0
#define FunFail -1
// ini文件操作类
class CIniFiles{
private:
CString sFileName;
public:
CIniFiles( CString I_FileName );
~CIniFiles();
void ReadString( CString I_SectionName,
CString I_KeyName,
CString *O_KeyValue );
void ReadInteger( CString I_SectionName,
CString I_KeyName,
int &O_KeyValue );
int WriteString( CString I_SectionName,
CString I_KeyName,
CString I_KeyValue );
int WriteInteger( CString I_SectionName,
CString I_KeyName,
int I_KeyValue );
};
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline CIniFiles::CIniFiles( CString I_FileName )
// ini文件类构造函数
{
sFileName = I_FileName;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline void CIniFiles::ReadString( CString I_SectionName,
CString I_KeyName,
CString *O_KeyValue )
// ini文件类读块中某关键字的值的函数(字符串型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
*O_KeyValue,
result,
Totalsize,
sFileName);
*O_KeyValue = result;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline void CIniFiles::ReadInteger( CString I_SectionName,
CString I_KeyName,
int &O_KeyValue )
// ini文件类读块中某关键字的值的函数(整型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
"",
result,
Totalsize,
sFileName);
if ( result != "")
O_KeyValue = atoi(result);
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline int CIniFiles::WriteString( CString I_SectionName,
CString I_KeyName,
CString I_KeyValue )
// ini文件类写块中某关键字的值的函数(字符串型)
{
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
I_KeyValue,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline int CIniFiles::WriteInteger( CString I_SectionName,
CString I_KeyName,
int I_KeyValue )
// ini文件类写块中某关键字的值的函数(整型)
{
char tempkey[24];
CString temps;
_itoa( I_KeyValue,tempkey,10);
temps = tempkey;
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
temps,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline CIniFiles::~CIniFiles()
// ini文件类析构函数
{
sFileName = "";
}
#include "stdafx.h"
#include "windows.h"
#define FunOk 0
#define FunFail -1
// ini文件操作类
class CIniFiles{
private:
CString sFileName;
public:
CIniFiles( CString I_FileName );
~CIniFiles();
void ReadString( CString I_SectionName,
CString I_KeyName,
CString *O_KeyValue );
void ReadInteger( CString I_SectionName,
CString I_KeyName,
int &O_KeyValue );
int WriteString( CString I_SectionName,
CString I_KeyName,
CString I_KeyValue );
int WriteInteger( CString I_SectionName,
CString I_KeyName,
int I_KeyValue );
};
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline CIniFiles::CIniFiles( CString I_FileName )
// ini文件类构造函数
{
sFileName = I_FileName;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline void CIniFiles::ReadString( CString I_SectionName,
CString I_KeyName,
CString *O_KeyValue )
// ini文件类读块中某关键字的值的函数(字符串型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
*O_KeyValue,
result,
Totalsize,
sFileName);
*O_KeyValue = result;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline void CIniFiles::ReadInteger( CString I_SectionName,
CString I_KeyName,
int &O_KeyValue )
// ini文件类读块中某关键字的值的函数(整型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
"",
result,
Totalsize,
sFileName);
if ( result != "")
O_KeyValue = atoi(result);
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline int CIniFiles::WriteString( CString I_SectionName,
CString I_KeyName,
CString I_KeyValue )
// ini文件类写块中某关键字的值的函数(字符串型)
{
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
I_KeyValue,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline int CIniFiles::WriteInteger( CString I_SectionName,
CString I_KeyName,
int I_KeyValue )
// ini文件类写块中某关键字的值的函数(整型)
{
char tempkey[24];
CString temps;
_itoa( I_KeyValue,tempkey,10);
temps = tempkey;
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
temps,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
inline CIniFiles::~CIniFiles()
// ini文件类析构函数
{
sFileName = "";
}
#2
CWinApp有四个成员函数用来读写INI文件:
GetProfileString,WriteProfileString,
GetProfileInt,WriteProfileInt
以下是在MSDN找到的范例:
CString strSection = "My Section";
CString strStringItem = "My String Item";
CString strIntItem = "My Int Item";
CWinApp* pApp = AfxGetApp();
pApp->WriteProfileString(strSection, strStringItem, "test");
CString strValue;
strValue = pApp->GetProfileString(strSection, strStringItem);
ASSERT(strValue == "test");
pApp->WriteProfileInt(strSection, strIntItem, 1234);
int nValue;
nValue = pApp->GetProfileInt(strSection, strIntItem, 0);
ASSERT(nValue == 1234);
#3
你在MSDN的索引中输入:
LoadPrivateProfile……能找到读INI文件的函数,如LoadPrivateProfileSection等等。
WritePrivateProfil……能找到写INI文件的函数,如WritePrivateProfileString等等。
这些都是些API函数,还有就是dzl所述CWinApp的成员函数也很好用。不过有可能会被写到注册表中。
其实微软更推荐把程序的设置放到注册表中。怎么办,看你自己的需要吧。
LoadPrivateProfile……能找到读INI文件的函数,如LoadPrivateProfileSection等等。
WritePrivateProfil……能找到写INI文件的函数,如WritePrivateProfileString等等。
这些都是些API函数,还有就是dzl所述CWinApp的成员函数也很好用。不过有可能会被写到注册表中。
其实微软更推荐把程序的设置放到注册表中。怎么办,看你自己的需要吧。
#4
我是想读取ini文件,而不是读取注册表中的文件,我使用了hellsun的程序,但发现什么也没有取出来,请问为什么?
#5
我把hellsun的程序改了改,調試通過了!
//iniFiles.h
#ifndef __INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
#define __INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
#define FunOk 0
#define FunFail -1
// ini文件操作?
class CIniFiles
{
private:
CString sFileName;
public:
CIniFiles( LPCTSTR I_FileName);
~CIniFiles();
void ReadString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
CString& O_KeyValue );
void ReadInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int &O_KeyValue );
int WriteString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
LPCTSTR I_KeyValue );
int WriteInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int I_KeyValue );
};
#endif //__INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
//iniFiles.cpp
#include "stdafx.h"
#include "iniFiles.h"
CIniFiles::CIniFiles( LPCTSTR I_FileName)
// ini文件?构造函?
{
sFileName = I_FileName;
if (sFileName.Find('\\') < 0)
{
char sOldDir[MAX_PATH];
GetCurrentDirectory(MAX_PATH, sOldDir);
sFileName = sOldDir;
sFileName += "\\";
sFileName += I_FileName;
}
}
void CIniFiles::ReadString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
CString& O_KeyValue )
// ini文件???中某??字的值的函?(字符串型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
O_KeyValue,
result,
Totalsize,
sFileName);
O_KeyValue = result;
delete[] result;
}
void CIniFiles::ReadInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int &O_KeyValue )
// ini文件???中某??字的值的函?(整型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
"",
result,
Totalsize,
sFileName);
if ( result != "")
O_KeyValue = atoi(result);
delete[] result;
}
int CIniFiles::WriteString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
LPCTSTR I_KeyValue )
// ini文件???中某??字的值的函?(字符串型)
{
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
I_KeyValue,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
int CIniFiles::WriteInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int I_KeyValue )
// ini文件???中某??字的值的函?(整型)
{
char tempkey[24];
CString temps;
_itoa( I_KeyValue,tempkey,10);
temps = tempkey;
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
temps,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
CIniFiles::~CIniFiles()
// ini文件?析构函?
{
sFileName = "";
}
//iniFiles.h
#ifndef __INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
#define __INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
#define FunOk 0
#define FunFail -1
// ini文件操作?
class CIniFiles
{
private:
CString sFileName;
public:
CIniFiles( LPCTSTR I_FileName);
~CIniFiles();
void ReadString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
CString& O_KeyValue );
void ReadInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int &O_KeyValue );
int WriteString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
LPCTSTR I_KeyValue );
int WriteInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int I_KeyValue );
};
#endif //__INIFILES_H_DKLFJ894TKJGFDS8U43JGJWERGJ__
//iniFiles.cpp
#include "stdafx.h"
#include "iniFiles.h"
CIniFiles::CIniFiles( LPCTSTR I_FileName)
// ini文件?构造函?
{
sFileName = I_FileName;
if (sFileName.Find('\\') < 0)
{
char sOldDir[MAX_PATH];
GetCurrentDirectory(MAX_PATH, sOldDir);
sFileName = sOldDir;
sFileName += "\\";
sFileName += I_FileName;
}
}
void CIniFiles::ReadString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
CString& O_KeyValue )
// ini文件???中某??字的值的函?(字符串型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
O_KeyValue,
result,
Totalsize,
sFileName);
O_KeyValue = result;
delete[] result;
}
void CIniFiles::ReadInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int &O_KeyValue )
// ini文件???中某??字的值的函?(整型)
{
char *result = new char[300];
int Totalsize = 300;
GetPrivateProfileString( I_SectionName,
I_KeyName,
"",
result,
Totalsize,
sFileName);
if ( result != "")
O_KeyValue = atoi(result);
delete[] result;
}
int CIniFiles::WriteString( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
LPCTSTR I_KeyValue )
// ini文件???中某??字的值的函?(字符串型)
{
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
I_KeyValue,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
int CIniFiles::WriteInteger( LPCTSTR I_SectionName,
LPCTSTR I_KeyName,
int I_KeyValue )
// ini文件???中某??字的值的函?(整型)
{
char tempkey[24];
CString temps;
_itoa( I_KeyValue,tempkey,10);
temps = tempkey;
if ( WritePrivateProfileString( I_SectionName,
I_KeyName,
temps,
sFileName ) != 0 )
return FunOk;
else
return FunFail;
}
CIniFiles::~CIniFiles()
// ini文件?析构函?
{
sFileName = "";
}
#6
必须先用构造函数指定要打开的文件(含全路径)
CIniFiles Ini("4.rul");
int tt;
Ini.ReadInteger("Public","DataNum",tt);
return;
大小写敏感
CIniFiles Ini("4.rul");
int tt;
Ini.ReadInteger("Public","DataNum",tt);
return;
大小写敏感
#7
注意,你读取时是否分配了内存区。
可以用以下例子试试:
char s[255];
GetPrivateProfileString("AppName","KeyName","",s,255,"文件路径名"
可以用以下例子试试:
char s[255];
GetPrivateProfileString("AppName","KeyName","",s,255,"文件路径名"
#8
分数虽然少了一些,但代表我对各位的感谢