luketowne

VC中释放程序中地资源到文件

方法一:使用CreateFile和WriteFile
HRSRC   res=::FindResource(NULL,   MAKEINTRESOURCE(IDR_JPG1),   "jpg");
HGLOBAL   gl=::LoadResource(NULL,res);
LPVOID   lp=::LockResource(gl);    //   查找,加载,锁定资源    


CString strFileName("d:\\Temp.jpg");
CFileFind   fFind;
BOOL bExist=fFind.FindFile(strFileName);    //判断文件是否存在
fFind.Close ();

if(!bExist)    //如果文件不存在则创建
{
   HANDLE fp=::CreateFile(strFileName,
            GENERIC_WRITE,
            FILE_SHARE_READ ,
            NULL,
            CREATE_NEW, //创建新文件,如目标文件已存在则调用失败
            0,
            NULL);  
   DWORD aa;              
   if (!::WriteFile (fp,lp,::SizeofResource(AfxGetResourceHandle(),res),&aa,NULL))
    return;       //sizeofResource 得到资源文件的大小
  
   ::CloseHandle (fp);        //关闭句柄
   ::FreeResource (gl);      //释放内存
}

方法2:使用CFile
CString strFileName("d:\\Temp.jpg");
CFileFind   fFind;
BOOL bExist=fFind.FindFile(strFileName);    //判断文件是否存在
fFind.Close ();

if(!bExist)
{
   HRSRC hResInfo = ::FindResource(NULL,(LPCSTR)IDR_JPG1,"jpg");
   HGLOBAL hRes = ::LoadResource(NULL,hResInfo );  

   CFile ff;
   ff.Open( "temp.jpg", CFile::modeCreate | CFile::modeWrite, NULL))
   ff.WriteHuge((LPSTR)hRes, ::SizeofResource(::AfxGetResourceHandle(), hResInfo)   );   //写入文件
   ff.Close();
}

posted on 2009-03-05 14:56 露露 阅读(471) 评论(0)  编辑 收藏 引用