zoukankan      html  css  js  c++  java
  • 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=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: emp 生成了一个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;

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

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

  • 相关阅读:
    Python开发测试工具案例分享①——开发环境搭建
    AWS—Xshell工具远程登录EC2虚拟机
    Jmeter接口测试⑧——websocker协议
    Jmeter接口测试⑦——参数化
    【转】git 2.27.0安装教程(Windows)
    Jmeter接口测试⑥——DELETE请求
    Jmeter接口测试⑤——PUT请求
    Jmeter接口测试④——响应断言
    Jmeter接口测试③——GET请求
    Jmeter接口测试②——正则提取器
  • 原文地址:https://www.cnblogs.com/xalion/p/7397363.html
Copyright © 2011-2022 走看看