VS2008 将资源释放到文件

1.得到当前exe的路径

         string strPath;
char  pchr[MAX_PATH] = {0};


GetModuleFileNameA(NULL, pchr,  MAX_PATH);


strPath = pchr ;
strPath.append("\\..\\"); // .exe的上一级文件夹
strPath += "ResDll.dll";
#ifdef _DEBUG
::OutputDebugString(strPath.c_str());
#endif
   if(!::PathFileExists(strPath.c_str())) // 判断文件是否存在
   {
    ReleaseRes(strPath.c_str(),(WORD)IDR_RESLIB_RESDLL,"ResLib");

    if(!::PathFileExists(strPath.c_str()))
    {
    ::AfxMessageBox("Release File Error, Please Close your anti-virus software!");
    return FALSE;
    }
   }

2. 将资源释放到文件

BOOL ReleaseRes(LPCSTR strFileName,WORD wResID,CString strFileType)

{
// 资源大小
DWORD dwWrite=0;


// 创建文件
HANDLE hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_TEMPORARY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM,NULL);
if ( hFile == INVALID_HANDLE_VALUE )
{
CString strMsg = "FzNetLicSvr: Release Res Fail ! --";
::OutputDebugString(strMsg + strFileName);


return FALSE;
}


// 查找资源文件中、加载资源到内存、得到资源大小
HRSRC hrsc =  FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType);
HGLOBAL hG = LoadResource(NULL, hrsc);
DWORD dwSize = SizeofResource( NULL,  hrsc);


// 写入文件
WriteFile(hFile,hG,dwSize,&dwWrite,NULL);   
CloseHandle( hFile );
return TRUE;
}
释放内嵌的资源文件到指定位置,你可以使用以下步骤: 1. 确保你的资源文件已经嵌入到了程序集中。可以在 Visual Studio 中的资源文件管理器中确认。 2. 使用 `Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)` 方法获取嵌入资源的流。其中 `resourceName` 是你的资源文件的完整名称,包括命名空间和文件名。 3. 创建一个新的文件流,指定你想要将资源文件释放到的位置。 4. 通过将嵌入资源的流复制到新的文件流中,将资源文件释放到指定位置。你可以使用 `Stream.CopyTo()` 方法来实现这一点。 下面是一个示例代码,展示了如何释放内嵌的资源文件到指定位置: ```csharp using System; using System.IO; using System.Reflection; public class ResourceManager { public static void ExtractResourceToFile(string resourceName, string targetPath) { using (Stream resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) { if (resourceStream == null) { throw new ArgumentException($"Resource '{resourceName}' not found."); } using (FileStream fileStream = File.Create(targetPath)) { resourceStream.CopyTo(fileStream); } } } } ``` 你可以调用 `ResourceManager.ExtractResourceToFile(resourceName, targetPath)` 方法,将资源文件释放到指定位置。其中 `resourceName` 是嵌入资源的完整名称,`targetPath` 是要释放到的目标位置的文件路径。 希望这能帮助到你!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值