kbmmw 中虚拟文件操作入门
kbmmw 中一直有一个功能,但是基本上都没有提过,但是在实际应用中,却非常有用,这个功能就是
虚拟文件包功能,他可以把一大堆文件保存到一个文件里面,方便后台管理。
kbmmw 的虚拟文件在单元kbmMWStreamStore 中实现,这个是非控件形式的,因此需要手工添加这个
单元。另外虚拟文件操作的类为TkbmMWLookupStorage,所有的操作都由这个类实现,具体可以参加源码。
因为这个很简单,直接就上界面
具体实现代码如下
- procedure TForm2.Button1Click(Sender: TObject);// 打包
- var
- sr:TSearchRec;
- i:integer;
- fs:TFileStream;
- fsfile:TFileStream;
- st:TkbmMWLookupStorage;
- begin
- fs:=TFileStream.Create(edit2.Text,fmCreate or fmOpenReadWrite);
- try
- st:=TkbmMWLookupStorage.Create(fs);
- try
- chdir(edit1.Text);
- i:=FindFirst('*.*',faNormal,sr);
- while i= do
- begin
- try
- fsfile:=TFileStream.Create(sr.Name,fmOpenRead or fmShareCompat);
- try
- st.Add(sr.Name,fsfile);
- finally
- fsfile.Free;
- end;
- except
- end;
- i:=FindNext(sr);
- end;
- finally
- st.Free;
- end;
- finally
- fs.Free;
- end;
- showmessage('打包成功');
- end;
- procedure TForm2.Button2Click(Sender: TObject); //列目录
- var
- fs:TFileStream;
- st:TkbmMWLookupStorage;
- begin
- fs:=TFileStream.Create(edit2.text,fmOpenReadWrite);
- try
- st:=TkbmMWLookupStorage.Create(fs);
- try
- Label1.Caption:=inttostr(st.Count);
- st.GetIdentifiers(ListBox1.Items);
- finally
- st.Free;
- end;
- finally
- fs.Free;
- end;
- end;
- procedure TForm2.Button3Click(Sender: TObject);//解压文件
- var
- i:integer;
- fs:TFileStream;
- fsfile:TFileStream;
- st:TkbmMWLookupStorage;
- sl:TStringList;
- s:string;
- begin
- fs:=TFileStream.Create(edit2.Text,fmOpenReadWrite);
- try
- st:=TkbmMWLookupStorage.Create(fs);
- try
- sl:=TStringList.Create;
- try
- st.GetIdentifiers(sl);
- for i:= to sl.Count- do
- begin
- s:=sl.Strings[i];
- fsfile:=TFileStream.Create(edit3.Text+s,fmCreate or fmOpenWrite);
- try
- st.Get(s,fsfile);
- finally
- fsfile.Free;
- end;
- end;
- finally
- sl.Free;
- end;
- finally
- st.Free;
- end;
- finally
- fs.Free;
- end;
- showmessage('解包成功!');
- end;
运行效果
可以看见一共319 个文件
同时在d:\temp 生成了一个so 文件
打包成功
列表可以显示包里面的文件
解压结果
解压正确。
有的时候我们为了保密和减小文件大小,可以采用加密和压缩。
下面再演示一下加密的方式。
加入一个kbmmwcrypt和两个按钮。
对应的代码如下:
- procedure TForm2.Button4Click(Sender: TObject); //加密打包
- var
- sr:TSearchRec;
- i:integer;
- ms:Tbytesstream;
- fs:TFileStream;
- fsfile:TFileStream;
- st:TkbmMWLookupStorage;
- begin
- fs:=TFileStream.Create(edit2.Text,fmCreate or fmOpenReadWrite);
- ms:=TbytesStream.Create;
- try
- st:=TkbmMWLookupStorage.Create(ms);
- try
- chdir(edit1.Text);
- i:=FindFirst('*.*',faNormal,sr);
- while i= do
- begin
- try
- fsfile:=TFileStream.Create(sr.Name,fmOpenRead or fmShareCompat);
- try
- st.Add(sr.Name,fsfile);
- finally
- fsfile.Free;
- end;
- except
- end;
- i:=FindNext(sr);
- end;
- kbmMWCrypt1.PassPhrase:='xalion123456';
- ms.Position:=;
- kbmMWCrypt1.Encrypt(nil,ms,fs);
- finally
- st.Free;
- end;
- finally
- fs.Free;
- ms.Free;
- end;
- showmessage('打包成功');
- end;
- procedure TForm2.Button5Click(Sender: TObject); // 解密展开
- var
- i:integer;
- fs:TFileStream;
- fsfile:TFileStream;
- ms:Tbytesstream;
- st:TkbmMWLookupStorage;
- sl:TStringList;
- s:string;
- begin
- fs:=TFileStream.Create(edit2.Text,fmOpenReadWrite);
- ms:=TbytesStream.Create;
- kbmMWCrypt1.PassPhrase:='xalion123456';
- kbmMWCrypt1.decrypt(nil,fs,ms);
- try
- st:=TkbmMWLookupStorage.Create(ms);
- try
- sl:=TStringList.Create;
- try
- st.GetIdentifiers(sl);
- for i:= to sl.Count- do
- begin
- s:=sl.Strings[i];
- fsfile:=TFileStream.Create(edit3.Text+s,fmCreate or fmOpenWrite);
- try
- st.Get(s,fsfile);
- finally
- fsfile.Free;
- end;
- end;
- finally
- sl.Free;
- end;
- finally
- st.Free;
- end;
- finally
- fs.Free;
- end;
- showmessage('解包成功!');
- end;
运行程序,与没有加密的运行效果一致,但是生成的文件已经被加密。
别人即使偷走文件,也不用担心信息泄露了。
kbmmw 中虚拟文件操作入门的更多相关文章
- 第32课 Qt中的文件操作
1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...
- 003-Tuple、Array、Map与文件操作入门实战
003-Tuple.Array.Map与文件操作入门实战 Tuple 各个元素可以类型不同 注意索引的方式 下标从1开始 灵活 Array 注意for循环的until用法 数组的索引方式 上面的for ...
- 重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作
原文:重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作 [源码下载 ...
- 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体
[源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...
- 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理
[源码下载] 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理 作者:webabcd 介绍背水一战 Windows 10 ...
- Java中的文件操作(一)RandomAccessFile
今天,学到的是java中的文件操作. Java.IO.File Java中操作文件用到RandomAccessFile类,既可以读取文件内容,也可以向文件输出数据,但不同与普通输入/输出流的是Rand ...
- Win 32平台SDK中的文件操作
读取文件: HANDLE hFile ; // 声明文件操作内核对象句柄 hFile = CreateFile(, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ...
- 关于文件的INode与Java中的文件操作接口
本文由作者周梁伟授权网易云社区发布. 近日做的项目中涉及到多进程共同读写多个文件的问题,文件名和最后修改时间都是可能会被频繁修改的,因而识别文件的唯一性会产生相当的麻烦,于是专门再学习了一下文件系统对 ...
- ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)
做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path ...
随机推荐
- 八:python 对象类型详解四:字典
一:字典通识: 1,字典通过键而不是偏移量来读取: 2,字典是任意对象的无序集合: 3,字典可变长.异构.任意嵌套: 4,字典属于可变映射类型: 5,对象引用表(散列表): 二:实际应用中的字典: 1 ...
- Camera插件推荐,解锁电影大师级视角控制
相机在游戏中的重要性是不言而喻的,尤其是一些MMORPG或FPS等类型的游戏,相机不仅需要跟随游戏主角进行移动,可能还要随时准备切换焦点,这就要求开发者将游戏相机管理得井井有条,能顺应游戏中可能瞬息发 ...
- Bugku——Flag在index里(http://120.24.86.145:8005/post/)
Bugku——Flag在index里(http://120.24.86.145:8005/post/) 进入题目发现有一个file参数,查看源码,发现该参数可以包含php文件,并且题目提示,flag在 ...
- VTP
VTP VLAN中继协议(Vlan Trunking Protocol),是CISCO专用协议.VTP负责在VTP域内同步VLAN信息,这样就不必在每个交换机上配置相同的VLAN信息.VTP还提供一种 ...
- Spring Boot 使用465端口发送邮件
2017年10月27日 15:04:24 伊宇紫 阅读数:2710 标签: 465端口邮件springboot 更多 个人分类: Java 版权声明:本文为博主原创文章,未经博主允许不得转载. h ...
- webpack浅析---入口篇
webpack有四个核心概念: 入口(entry) 输出(output) loader 插件(plugins) webpack-merge将环境.构建目标.运行时合并 入口: 入口起点是指webpac ...
- tomcat/eclipse提速[z]
在使用Eclipse开发项目过程中,一度使Eclipse陷入瘫痪状态,Tomcat启动项目时也异常缓慢,增加了超时限制并没有用,有时候项目根本运行不起来,简直让人崩溃,可能我电脑内存小(4G),配置低 ...
- "//./root/CIMV2" because of error 0x80041003. Events cannot be delivered through this filter until the problem is corrected.
windows系统日志错误信息: Event filter with query "SELECT * FROM __InstanceModificationEvent WITHIN 60 W ...
- webstorm 打包angular Module build failed: Error: No PostCSS Config found
angular创建项目后,在webstorm中启动时,报出如题错误,奇怪的是我从命令行启动(ng server)是没有问题的,多方寻求无果,在网上看到过说要加一个配置文件,我不信.我觉得是我配置哪里有 ...
- 字典的增删改查 daty 5
字典:python中非常重要的数据类型,在python中唯一一个映射的数据类型数据类型分类 按照数据可变与不可变: # 不可变数据类型: int str bool tuple # 可变数据类型: li ...