VC程序如何释放文件

很久以前写过一个在EXE的资源中释放出一个文件,然后加载运行做些事情的小程序,时间久了,忽然又有这个需求的时候,居然忘记是如何做的了,原来的程序代码早被删了,自己胡乱试验几次,结果弄出N个蓝屏出来,只好上网查了一下,但没有发现很理想的资料。只好吭哧吭哧费了九牛二虎才搞定,所以在此记录一下,以免以后忘记了。

需要:释放一个名为001.jpg文件到C盘根目录,并修改成名字002.jpg

在VC工程的的Resource View画面中,鼠标右键->add->add resource,出现添加资源画面->选”Import…”->找到001.jpg->确定,显示资源类型定义对话框,在资源类型定义中,自己定义一个不存在的类型名,这里叫TROJANHORSE,然后就把001.jpg添加进来了。这个时候,”Resource View”画面中会多出一个”TROJANHORSE”类型,下面资源名为:IDR_TROJANHORSE1,这个名字可以自由修改。

在代码中,写一个函数,(借助了网上资料,出处忘记了)

BOOL ReleaseMyFile(LPCTSTR lpszDestFilePath, LPCTSTR lpName, LPCTSTR lpType)  
{  
    HRSRC hRsrc = ::FindResource(NULL, lpName, lpType);  
    if (NULL == hRsrc)  
        return FALSE;  
  
    HGLOBAL hGlobal = ::LoadResource(NULL, hRsrc);  
    if (NULL == hGlobal)  
        return FALSE;  
  
    DWORD dwSize = ::SizeofResource(NULL, hRsrc);  
    LPVOID pBuffer = ::LockResource(hGlobal);  
  
    BOOL bRt = FALSE;  
  
    FILE* fp = _tfopen(lpszDestFilePath, _T("wb"));  
    if (fp != NULL)  
    {  
        if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))  
            bRt = TRUE;  
        fclose(fp);  
    }  
    return bRt;  
}

然后就可以在main中调这个函数释放资源文件了,具体代码如下:

BOOL bRt = ReleaseMyFile(TEXT("c:\002.jpg"), MAKEINTRESOURCE(IDR_TROJANHORSE1), TEXT("TROJANHORSE")); 

当然,可以把001.jpg换成exe或者sys文件,做该做的事情。