VC中如何将资源打包并释放到指定文件夹
转载请注明来源:https://www.cnblogs.com/hookjc/
很多时候,我们可能要将某些文件打包到资源中,然后当程序执行的时候,发现缺少某些文件时,进行自我修复,以维持程序的正常执行,
很多安装程序或者比较高级点的智能程序都已经这样做,比如文件损坏时,安装程序将修复这些文件.一些高级程序的常用设置及文件
遇到破坏时,也会自我修复,它们的这些神奇功能,全都是依靠自身的资源包,替换损坏的文件,或者创建新的默认文件实现的.
下面我来说一说这种程序比较普通的一些做法:
首先在程序入口处,我们以MFC程序为例子,我们找到APP文件,在InitInstance()中执行文件检查,如果发现某些文件损坏或者不存在,
那么我们将自身资源包的正常文件释放出来,在这里我给出两个函数,一个是检查指定文件是否存在,另一个是释放资源包文件的函数
if(!FileExteriorFile(FileName))//注意:FileName是你指定目录下的指定文件 { if(!FreeMyData(MAKEINTRESOURCE(IDR_EXFILE1), "ExFile", FileName,0))//释放文件到指定目录 { MessageBox(NULL,FileName,"Free File Fail:",MB_ICONERROR); } }
发现不存在时,将调用下面的函数释放资源包的文件
//将指定资源释放到指定目录下生成特定文件BOOL FreeMyData(LPCTSTR ResName, LPCTSTR ResType, LPCTSTR FileName, int Type){BOOL bRet = TRUE;HINSTANCE hInst = AfxGetInstanceHandle(); //先判断我们指定的资源是否存在HRSRC hResInfo = FindResource(hInst,ResName,ResType);if(hResInfo == NULL)return FALSE;HANDLE hFile = NULL;DWORD dwWritten = 0; //开始调入指定的资源到内存HGLOBAL hResData = LoadResource(hInst,hResInfo);LPVOID pvResData = LockResource(hResData);DWORD dwResSize = SizeofResource(hInst,hResInfo); //再创建目标文件并保存数据至文件if(Type == 1)//系统加隐藏属性 如果指定类型为1,那么加上系统和隐藏属性,防止普通用户对文件进行破坏{hFile = CreateFile(FileName,GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM, NULL); WriteFile(hFile, pvResData, dwResSize, &dwWritten, NULL); } else { hFile = CreateFile(FileName,GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hFile, pvResData, dwResSize, &dwWritten, NULL); } if(hFile == INVALID_HANDLE_VALUE)//创建文件失败 { FreeResource(hResData); return FALSE; } //释放有关内存资源 CloseHandle(hFile); FreeResource(hResData); return TRUE; }将上面两个函数COPY到你工程的APP文件中,现在假设你已将一个Demo.dat文件通过资源映射导入工程当中,类型属于ExFile,文件名是IDR_EXFILE1,那么你在InitInstance()中的调用形式如下:BOOL FileExteriorFile(LPCTSTR FileName)//查找指定的文件是否存在 { WIN32_FIND_DATA fd; HANDLE hd=::FindFirstFile(FileName,&fd);//开始查找 if(hd==INVALID_HANDLE_VALUE) { return FALSE; } FindClose(hd);//关闭查找 return TRUE; }
来源:python脚本自动迁移
VC中如何将资源打包并释放到指定文件夹的更多相关文章
- Win10 中 Git clone github上内容保存到指定文件夹
在要存储的右键→Git Bash Here 弹出命令窗口 输入 git clone 链接 很快就下载完成
- webpack 打包出多个HTML文件,多个js文件,图片文件放置到指定文件夹中
一.webpack.config.js简单代码 const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { ...
- [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件
原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/ C#中 ...
- VC 获取指定文件夹路径的方法小结
VC获取指定文件夹路径 flyfish 2010-3-5 一 使用Shell函数 1 获取应用程序的安装路径 TCHAR buf[_MAX_PATH];SHGetSpecialFolderPath( ...
- win7文件夹图标中多了一把小锁打不开文件夹怎么办?
win7文件夹图标中多了一把小锁打不开文件夹怎么办?解决办法一:右击目录→取得管理员权限!该方法适用于win7旗舰版.解决办法二:右击目录→属性→安全→高级→选择everyone→更改权限→勾上完全访 ...
- (Python)导出指定文件夹中as文件的完全限定类名
AS3程序在编译的过程中,有一个特点是这样的,不管是项目中的类,还是标准库或者第三方库的类,编译的时候只会把用到的那些类文件编译进去,也就是说,某一些类,只要没有被主程序引用到,那这个文件是不会被编译 ...
- Android 遍历sdcard中指定文件夹下的图片(jpg,jpeg,png)
File scanner5Directory = new File(Environment.getExternalStorageDirectory().getPath() + "/scann ...
- [置顶] LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句
LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句 declare @sql varchar(4000), @dirpath varch ...
- C#遍历指定文件夹中的所有文件(转)
原文链接:http://www.cnblogs.com/qianqianfy/archive/2009/07/08/1518974.html 1. C#遍历指定文件夹中的所有文件 DirectoryI ...
随机推荐
- CS5211替代PS8625|设计DP转LVDS转接板|替代PS8625方案
1.CS5211与PS8625功能概述 CS5211是一个eDP到LVDS转换器,配置灵活,适用于低成本显示系统.CS5211与eDP 1.2兼容,支持1通道和2通道模式,每通道速度为1.62Gbps ...
- Linux搜索查找类
find find将从指定目录下递归地遍历各个子目录,将满足条件的文件或目录显示在终端,如果没有则不显示 基本语法 find 搜索范围 [选项] 选项说明 选项 功能 -name 按照文件名查找 -u ...
- 使用JavaScript控制HTML元素的显示和隐藏
利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一: document.getElementB ...
- Java高效开发-fiddler抓包工具
1.简介 Fiddler是最常用的抓包工具之一,只要打开之后就能够实现数据包抓取,关闭之后会自动取消代理,非常方便本地调试 2.下载 阿里云盘地址:https://www.aliyundrive.co ...
- SpringBoot中如何优雅的使用多线程
SpringBoot中如何优雅的使用多线程 当异步方法有返回值时,如何获取异步方法执行的返回结果呢?这时需要异步调用的方法带有返回值CompletableFuture
- 关于一类容斥原理设计 dp 状态的探讨
写在前面 为什么要写?因为自己学不明白希望日后能掌握. 大体思路大概是 设计一个容斥的方案,并使其贡献可以便于计算. 得出 dp 状态,然后优化以得出答案. 下列所有类似 \([l,r]\) 这样的都 ...
- windows 找不到文件gpedit.msc
前言: 最新在装一个软件的时候,需要更改本地组的一些内容,win+R输入gpedit.msc,提示找不到文件. 解决: 第一种方法:笔者电脑是window10 家庭版,试了网上新建一个txt文件,写入 ...
- iView 用renderContent自定义树组件
iview的树组件在有默认选中状态的时候默认选中状态的样式改变有bug,默认选中的样式不好看,鉴于此,有renderContent来改造iview的树组件, 效果如图 代码如下 <templat ...
- 经典变长指令-ModRM
一.如何计算ModRM 0X88 MOV Eb,Gb G:通用寄存器 0X89 MOV Ev,Gv E:寄存器/内存 0X8A MOV Gb,Eb b:字节 0X8B MOV Gv,Ev v:Word ...
- 硬核 - Java 随机数相关 API 的演进与思考(上)
本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算 ...