难题: 压缩中的问题,请高手帮忙看看(50分)

  • 主题发起人 主题发起人 zysunit
  • 开始时间 开始时间
Z

zysunit

Unregistered / Unconfirmed
GUEST, unregistred user!
第一个难题:
Procedure TfolderFileZip.WriteHeader(Var HeaderStream:TMemoryStream;
var CompressDate:string; //压缩日期
var compressPathstr:string //压缩文件路径
);
begin
HeaderStream.Position :=0; //压缩日期开始写入位置
if Length(CompressDate) > 0 then
HeaderStream.WriteBuffer(CompressDate[1],10); //写压缩日期

HeaderStream.Position :=Length(CompressDate); //压缩文件路径开始写入位置
if Length(compressPathstr) > 0 then
HeaderStream.WriteBuffer(compressPathstr[1],Length(compressPathstr)); //写压缩文件路径

end;


Procedure TfolderFileZip.ReadHeader(Var HeaderStream:TMemoryStream;
var CompressDate:string; //压缩日期
var compressPathstr:string //压缩文件路径
);
begin

HeaderStream.Position :=0; //压缩日期开始读的位置
SetLength(CompressDate,10); //设置压缩日期长度
HeaderStream.ReadBuffer(CompressDate[1],10); //读压缩日期

HeaderStream.Position := Length(CompressDate); //压缩文件路径开始读的位置
SetLength(compressPathstr,Length(compressPathstr)); //设置压缩文件路径长度
HeaderStream.ReadBuffer(compressPathstr[1],Length(compressPathstr)) ; //读压缩文件路径

end;

上面是第一个过程WriteHeader是压缩文件时写文件头(2048个字节) , 其中两个变量:CompressDate 是知道长度的 而 compressPathstr 是不可预知长度的


而第二个过程是ReadHeader是解压缩时读文件头, 也是两个变量 我的问题是
SetLength(compressPathstr,Length(compressPathstr)) 这句中Length(compressPathstr) 怎么取得长度呢????!!!!!



第二个难题 :
对于一个自己定义压缩的压缩文件如*.xx,*.yy 我需要读取其中的文件(多个), 不想让人看见取出来的文件 该如何处理???
 
有人知道没有
 
帮帮忙吧
 
你的第一个问题.......汗,太简单了,你在写完CompressDate后,先取得Length(compressPathstr),然后把这个integer值写入,再写compressPathstr
你读的时候,先读完CompressDate,然后读个sizeof(integer),这个就是compressPathstr长度,然后根据这个值去读compressPathstr

你的压缩文件如果含有多个文件的话,应该先有个列表来纪录每个文件的长度或者对于压缩文件的起始位置
如果你用的是delphi自带的压缩类,那么解压是在内存中进行的,解压后你直接根据文件长度算偏移把要取得的文件单独read出来就行了
 
hs-kill, 首先感谢你的回答:
你帮我解决了第一个题 谢谢! 结帖的时候会给你的分

第二个题 可能是我没说清楚 , 其实是这样的:
如我有十个文件 放在一个文件夹中 压缩 生成一个如 *.BH 之类的文件
这个文件放在远程服务器上 在客户端下载后 解压缩 (这些都已做好)
解压缩后的文件我不想让别人看见 文件夹下面的文件是要随时被调用的
我考虑用 文件夹加密 或 隐藏 或者有更好的办法没有?

现在有朋友给我了思路 : 模仿Windows的文件IO 虚拟光驱 用到DeviceIOControl这个api函数 , 文件是由虚拟簇构成,然后映射到卷上的逻辑簇,最后映射到磁盘上物理地址空间.可以通过这些映射获得文件的实际物理扇区地址进行读写,那么就可以按照自己的方式来读写文件,别人是看不了文件内容的.

但我还是不知道怎么下手 有那位 朋友 有这方面的资料或者有原码就更好
 
有人知道没有? 帮帮忙
 
是不是分少了喽 少了再加
 
版主:hbezwwl, bubble 帮我看看也行
 
接受答案了.
 

Similar threads

回复
0
查看
1K
不得闲
I
回复
0
查看
650
import
I
D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
后退
顶部