类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
高分求VC中访问ini 文件的代码,
提供思路也行,
顶的有分.不够可以再给.
网友回答:
好像是GetPrivateString什么的吧,我现在没装msdn,记不太清了。
一,使用CFile
void CReadWriteIniDlg::OnButton1()
{
CFile file;
//写文件
file.Open("f:\\test.ini",CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate);
file.Write("0123456789",10);
file.Close();
//读文件
file.Open("f:\\test.ini",CFile::modeRead|CFile::modeCreate|CFile::modeNoTruncate);
int nLength = file.GetLength();
char * pszBuff = new char[nLength + 1 ];
file.Read(pszBuff,nLength);
pszBuff[nLength] = \0 ;
MessageBox(pszBuff);
delete [] pszBuff;
file.Close();
}
CFile::modeCreate|CFile::modeNoTruncate风格的作用:文件存在就打开,不存在就创建新文件.
|是位或,这儿也可以用+.
Read,Write存取的数据大小限制于64k以内,如果数据大于64K,则用ReadHuge,WriteHuge.
二.用 CStdioFile
void CReadWriteIniDlg::OnButton2()
{
CStdioFile file ;
file.Open("f:\\test.ini",CFile::modeReadWrite|CFile::modeCreate|CFile::modeNoTruncate);
//写文件
file.WriteString("ABCDEFG\n");
file.WriteString("abcdefg\n");
//读文件
file.SeekToBegin();//将文件指针移动到最后
char szText[1000];
while(NULL != file.ReadString(szText,999))
MessageBox(szText);
file.Close();
}
三,以ini的形式存取.
UINT GetProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault );
BOOL WriteProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue );
CString GetProfileString( LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault = NULL );
BOOL WriteProfileString( LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue );
void CReadWriteIniDlg::OnButton3()
{
//写注册表
AfxGetApp()->WriteProfileString("Section","key","value");
//ReadWriteIni.ini(与可执行程序同名)的内容如下
//[Section]
//key=value
//如果文件或Section或key不存在,则返回第三个参数的值
CString strVaule = AfxGetApp()->GetProfileString("Section","key","Default");
}
如果不想写在ini中,可添加如下代码,因为SetRegistryKey是保护级的,所以内能在加在C…App中.
BOOL CReadWriteIniApp::InitInstance()
{
//不写ini,直接写在注册表的HKEY_CURRENT_USER\Software\csdn\ReadWriteIni
SetRegistryKey("csdn");
….
}
void CReadWriteIniDlg::OnButton4()
{
CString strFileName = "f:\\test.ini";
//strFileName文件名
WritePrivateProfileString("Section","key","value",strFileName);
char szValue[1000];
GetPrivateProfileString("Section","key","Default",szValue,999,strFileName);
}
GetPrivateProfileString()
GetPrivaetProfileInt()
等API可以实现。
BOOL WritePrivateProfileString(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpString,
LPCTSTR lpFileName
);
其中各参数的意义:
LPCTSTR lpAppName 是INI文件中的一个字段名.
LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.
LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.
LPCTSTR lpFileName 是完整的INI文件名.
//////////////////////////////
CString strName,strTemp;
int nAge;
strName="张三";
nAge=12;
::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini");
此时c:\stud\student.ini文件中的内容如下:
[StudentInfo]
Name=张三
要将学生的年龄保存下来,只需将整型的值变为字符型即可:
strTemp.Format("%d",nAge);
::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini");
读字符串:
CString strStudName;
int nStudAge;
GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini");
执行后 strStudName 的值为:"张三",若前两个参数有误,其值为:"默认姓名".
这里的参数意义与上相同.使用方法如下:
读数值要用另一个函数:
nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini");
如果是取字符串,用GetPrivateProfileString()函数,如果是取整行数据,使用GetPrivateProfileInt()函数,查以下msdn就知道了;举一个取字符串的例子吧:
char sConfigSection[50+1];
char sUser[30+1];
strcpy(sConfigSection,"DB Conncetion");
GetPrivateProfileString(sConfigSection,"User",",sUser,30,CONFIG_FILE);
//Ini文件的读写
//写
::WritePrivateProfileString("StudentName","Name","Alon",".\\STUDENT.ini");
::WritePrivateProfileString("StudentCount","Count","1",".\\STUDENT.ini");
//读
//读字符串
::GetPrivateProfileString("StudentName","Name",NULL,strStudentName.GetBuffer(128),128,".\\STUDENT.ini"); //128为缓冲区大小
//读整型数
int Count=::GetPrivateProfileInt("StudentCount","Count",0,".\\STUDENT.ini");
用GetPrivateProfileString和WritePrivateProfileString差不多就可以搞定了
帮顶混分