码迷,mamicode.com
首页 > 其他好文 > 详细

kbmmw 中虚拟文件操作入门

时间:2017-08-19 20:03:16      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:cli   后台管理   arch   mwl   store   box   next   cep   生成   

     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;

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

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

 

kbmmw 中虚拟文件操作入门

标签:cli   后台管理   arch   mwl   store   box   next   cep   生成   

原文地址:http://www.cnblogs.com/xalion/p/7397363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!