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;

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

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

 

目录
相关文章
|
4月前
|
网络协议 算法 网络性能优化
C语言 网络编程(十五)套接字选项设置
`setsockopt()`函数用于设置套接字选项,如重复使用地址(`SO_REUSEADDR`)、端口(`SO_REUSEPORT`)及超时时间(`SO_RCVTIMEO`)。其参数包括套接字描述符、协议级别、选项名称、选项值及其长度。成功返回0,失败返回-1并设置`errno`。示例展示了如何创建TCP服务器并设置相关选项。配套的`getsockopt()`函数用于获取这些选项的值。
117 11
|
JavaScript 前端开发
前端学习笔记202305学习笔记第二十九天-Socket.io文本编辑实时共享之原生dom导入和移除的技巧2
前端学习笔记202305学习笔记第二十九天-Socket.io文本编辑实时共享之原生dom导入和移除的技巧2
45 0
|
Web App开发 自然语言处理 JavaScript
带你读《现代Javascript高级教程》十、JavaScript引擎的工作原理:代码解析与执行(1)
带你读《现代Javascript高级教程》十、JavaScript引擎的工作原理:代码解析与执行(1)
|
Web App开发 缓存 JavaScript
带你读《现代Javascript高级教程》十、JavaScript引擎的工作原理:代码解析与执行(2)
带你读《现代Javascript高级教程》十、JavaScript引擎的工作原理:代码解析与执行(2)
|
JavaScript 前端开发
前端学习笔记202305学习笔记第二十九天-Socket.io文本编辑实时共享之原生dom导入和移除的技巧3
前端学习笔记202305学习笔记第二十九天-Socket.io文本编辑实时共享之原生dom导入和移除的技巧3
61 0
|
JavaScript 前端开发
前端学习笔记202305学习笔记第二十九天-Socket.io文本编辑实时共享之原生dom导入和移除的技巧1
前端学习笔记202305学习笔记第二十九天-Socket.io文本编辑实时共享之原生dom导入和移除的技巧1
66 0
|
C# Windows
☀️ 学会编程入门必备 C# 最基础知识介绍—— C# 高级文件操作(文本文件的读写、二进制文件的读写、Windows 文件系统的操作)
前言🙏 C# 文本文件的读写👇 StreamWriter 类 C# 二进制文件的读写👏 BinaryReader 类 BinaryWriter 类 C# Windows 文件系统的操作👋 DirectoryInfo 类 FileInfo 类
☀️ 学会编程入门必备 C# 最基础知识介绍—— C# 高级文件操作(文本文件的读写、二进制文件的读写、Windows 文件系统的操作)