2008/09/25

리소스에 파일 넣고 실행시 파일로 추출하기

프로젝프의 리소스에 파일을 첨부시키고 실행시 필요한 시점에 파일로 추출하는 소스이다.


#include
#include

HMODULE hModule = GetModuleHandle(NULL);

TCHAR szFilename[MAX_PATH];
TCHAR Drive[_MAX_DRIVE];
TCHAR Path[_MAX_DIR];
TCHAR Filename[_MAX_FNAME];
TCHAR Ext[_MAX_EXT];
GetModuleFileName(NULL, szFilename, sizeof(szFilename));
_tsplitpath_s(szFilename, Drive, _MAX_DRIVE, Path,
_MAX_DIR, Filename, _MAX_FNAME, Ext, _MAX_EXT);

TCHAR szFile[MAX_PATH];

// Extract "file.fnt"
_stprintf_s(szFile, MAX_PATH, _T("%s%sfile.fnt"), Drive, Path);

if( (_waccess( szFile, 0 )) == -1 ) // 파일이 존재하지 않을 경우
{
HRSRC hrsrc = FindResource(hModule,
(LPCTSTR)IDR_MY_FONT, _T("MyFILE"));
DWORD dwSize = SizeofResource(hModule, hrsrc);
HGLOBAL hGlobal = LoadResource(hModule, hrsrc);

CHAR *pData = (CHAR *) LockResource(hGlobal);

CFile file;
CFileException e;
if (file.Open(szFile,
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary, &e))
{
file.Write(pData, dwSize);
file.Close();
}
else
{
TCHAR szErr[1024];
e.GetErrorMessage(szErr, 1024);

AfxMessageBox(szErr);
}

DeleteObject(hGlobal);
}


// Extract "file.dat"
_stprintf_s(szFile, MAX_PATH, _T("%s%sfile.dat"), Drive, Path);

if( (_waccess( szFile, 0 )) == -1 ) // 파일이 존재하지 않을 경우
{
HRSRC hrsrc = FindResource(hModule,
(LPCTSTR)IDR_MY_DATA, _T("MyFILE"));
DWORD dwSize = SizeofResource(hModule, hrsrc);
HGLOBAL hGlobal = LoadResource(hModule, hrsrc);

CHAR *pData = (CHAR *) LockResource(hGlobal);

CFile file;
CFileException e;
if (file.Open(szFile,
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary, &e))
{
file.Write(pData, dwSize);
file.Close();
}
else
{
TCHAR szErr[1024];
e.GetErrorMessage(szErr, 1024);

AfxMessageBox(szErr);
}

DeleteObject(hGlobal);
}

Original Post : http://neodreamer-dev.tistory.com/171

No comments :

Post a Comment