读取并创建资源文件
Author: Liang Bo
在许多情况下开发人员需要把文件保存到资源中并的运行时创建到特定的位置,以下代码可以帮你做到:
//以下代码来自TZ MFC.NET Primer 1.01,访问 www.apptemplate.com 获得更多代码和信息
//尊重版权,才能振兴中国软件
CtstApp::CreateFileFromResource(LPCTSTR lpszResourceName, LPCTSTR lpszType, LPCTSTR lpszTargetName)
{
ASSERT(lpszResourceName != NULL);
if(lpszTargetName==_T(""))return false;
// determine location of the binary resource in resource fork
HINSTANCE hInst = AfxFindResourceHandle(lpszResourceName, lpszType);
HRSRC hRsrc = ::FindResource(hInst, lpszResourceName, lpszType);
// If failed, try instance handle
if (hRsrc == 0)
hRsrc = ::FindResource(hInst = AfxGetInstanceHandle(), lpszResourceName, lpszType);
if (hRsrc == NULL)
return false;
HGLOBAL hData = LoadResource(hInst, hRsrc);
if (hData == NULL)
return false;
DWORD dwSize = SizeofResource(hInst, hRsrc);
LPBYTE pData = (LPBYTE) LockResource(hData);
CFile m_File;
CFileException e;
if( !m_File.Open( lpszTargetName, CFile::modeCreate | CFile::modeWrite, &e ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
UnlockResource(hData);
FreeResource(hRsrc);
return false;
}
else
{
m_File.Write(pData,dwSize);
m_File.Close();
}
UnlockResource(hData);
FreeResource(hRsrc);
return true;
}
参数说明:
lpszResourceName 资源名称,使用字符串的方式标定ID值,如” config.xml”
lpszType 资源类型,如”ICON”,”Jpg”,”XML”
lpszTargetName 目标文件名称,如”AppConfig.xml”
调用示例:
CreateFileFromResource(_T("config.xml"),_T("xml"),_T("AppConfig.xml"));