kbmmw 中虚拟文件操作入门

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: kbmmw 中一直有一个功能,但是基本上都没有提过,但是在实际应用中,却非常有用,这个功能就是 虚拟文件包功能,他可以把一大堆文件保存到一个文件里面,方便后台管理。      kbmmw 的虚拟文件在单元kbmMWStreamStore 中实现,这个是非控件形式的,因此需要手工添加这个 单元。

     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=0 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:=0 to sl.Count-1 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=0 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:=0;
        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:=0 to sl.Count-1 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;

运行程序,与没有加密的运行效果一致,但是生成的文件已经被加密。

别人即使偷走文件,也不用担心信息泄露了。

 

目录
相关文章
|
6月前
|
SQL 监控 索引
如何在 SQL Server 中使用 `PATINDEX` 函数
【8月更文挑战第8天】
621 9
|
C++ UED iOS开发
iPhone OS 4 革了谁的命?,互联网营销
     本来还想写iPad,网上评论文章很多,就不凑热闹了。   4月8日,Apple开了iPhone OS 4的发布会。(注意,OS4即可用于iPhone,也可用于iPad.)   不免好奇,iPhone OS 4 革了谁的命?   目标1:Android, Windows Phone 7,Blackberry。
1188 0
判断TdxDBTreeView的节点是否可编辑
在TdxDBTreeView控件的OnEditing事件中写入AllowEdit := CheckEdit;  //CheckEdit为判断的函数
567 0
|
3天前
|
人工智能 自然语言处理 Shell
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
仅用3分钟,百炼调用满血版Deepseek-r1 API,享受百万免费Token。阿里云提供零门槛、快速部署的解决方案,支持云控制台和Cloud Shell两种方式,操作简便。Deepseek-r1满血版在推理能力上表现出色,尤其擅长数学、代码和自然语言处理任务,使用过程中无卡顿,体验丝滑。结合Chatbox工具,用户可轻松掌控模型,提升工作效率。阿里云大模型服务平台百炼不仅速度快,还确保数据安全,值得信赖。
147976 24
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
|
5天前
|
人工智能 API 网络安全
用DeepSeek,就在阿里云!四种方式助您快速使用 DeepSeek-R1 满血版!更有内部实战指导!
DeepSeek自发布以来,凭借卓越的技术性能和开源策略迅速吸引了全球关注。DeepSeek-R1作为系列中的佼佼者,在多个基准测试中超越现有顶尖模型,展现了强大的推理能力。然而,由于其爆火及受到黑客攻击,官网使用受限,影响用户体验。为解决这一问题,阿里云提供了多种解决方案。
16724 37
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
5天前
|
并行计算 PyTorch 算法框架/工具
本地部署DeepSeek模型
要在本地部署DeepSeek模型,需准备Linux(推荐Ubuntu 20.04+)或兼容的Windows/macOS环境,配备NVIDIA GPU(建议RTX 3060+)。安装Python 3.8+、PyTorch/TensorFlow等依赖,并通过官方渠道下载模型文件。配置模型后,编写推理脚本进行测试,可选使用FastAPI服务化部署或Docker容器化。注意资源监控和许可协议。
1306 8
|
13天前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
3415 117
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
8天前
|
人工智能 自然语言处理 API
DeepSeek全尺寸模型上线阿里云百炼!
阿里云百炼平台近日上线了DeepSeek-V3、DeepSeek-R1及其蒸馏版本等六款全尺寸AI模型,参数量达671B,提供高达100万免费tokens。这些模型在数学、代码、自然语言推理等任务上表现出色,支持灵活调用和经济高效的解决方案,助力开发者和企业加速创新与数字化转型。示例代码展示了如何通过API使用DeepSeek-R1模型进行推理,用户可轻松获取思考过程和最终答案。
|
5天前
|
人工智能 自然语言处理 程序员
如何在通义灵码里用上DeepSeek-V3 和 DeepSeek-R1 满血版671B模型?
除了 AI 程序员的重磅上线外,近期通义灵码能力再升级全新上线模型选择功能,目前已经支持 Qwen2.5、DeepSeek-V3 和 R1系列模型,用户可以在 VSCode 和 JetBrains 里搜索并下载最新通义灵码插件,在输入框里选择模型,即可轻松切换模型。
932 14

热门文章

最新文章