请教高手:这个问题如何决解[文件捆梆的问题] (70分)

  • 主题发起人 主题发起人 laohe
  • 开始时间 开始时间
L

laohe

Unregistered / Unconfirmed
GUEST, unregistred user!
Function Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
var
Target,Source:TFileStream;
MyFileSize:integer;
begin
try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
try
Target.Seek(0,soFromEnd);//往尾部添加资源
Target.CopyFrom(Source,0);
MyFileSize:=Source.Size+Sizeof(MyFileSize);//计算资源大小,并写入辅程尾部
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
finally
Target.Free;
Source.Free;
end;
except
Result:=False;
Exit;
end;
Result:=True;
end;
[red]我采用上面这个函数加入捆梆文件,将A/B/C三个文件加入到A文件;但是用下面的函数只能读取最后一个文件(就是C文件),
其它的怎么样读取,还请大位赐教。[/red]


Function Cjt_LoadFromFile(SourceFile,TargetFile :string):Boolean;
var
Source:TFileStream;
Target:TMemoryStream;
MyFileSize:integer;
begin
try
Target:=TMemoryStream.Create;
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
try
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源大小
Source.Seek(-MyFileSize,soFromEnd);//定位到资源位置
Target.CopyFrom(Source,MyFileSize-sizeof(MyFileSize));//取出资源
Target.SaveToFile(TargetFile);//存放到文件
finally
Target.Free;
Source.Free;
end;
except
Result:=false;
Exit;
end;
Result:=true;
end;
 
拜托!这样的程序不要贴了好不好?有什么意思?
要搞,就深入EXE文件内部修改!
 
[blue]我是初学者,我现在只能问这类问题了,您是高手,为何不帮忙解答一下,不胜感激[/blue]
 
你可以自已对它进行修改,加一个读取第N个资源的参数。
如果是1(倒数的)读取就是这样的。
如果是2,先读取第1个资源的长度,然后Source.seek(-第1个资源长度,sofromcurrent);
现在source的指针已指向了第2个资源的长度,读取,然后读文件并保存就可以了。
依次类推。
 
看不懂,看来这个问题把我卡住了

 
你自已看看流是如何使用的,再想想Cjt_LoadFromFile如何工作。就会明白我说的了。
 
我不懂我学!
 
诸位全倍,我现在真的搞不懂,又很急;

有没有高手给个例子;可以加入并读取多个文件,我对比一下,好让我学学;

这个问题放很久了,我真的没有办法了
 
能不能将以面的函数加入名称,以后就可以直接采用了,

如果分数不足,我以加,我还有80分,全部给上,谢谢
 
远帆兄,我需要你的帮助,你能给我个例子吗
 
你是高手,向你学习!
 
Source.Seek(-sizeof(MyFileSize),soFromEnd);
这句话之前附初始值了吗?

给你出个主意,在文件尾部加个文件描述头,格式可以设计为:
A/B/C

B文件名 SIZE、FILETIME、ATTRIB .... B头地址、尾地址 分隔符 C文件.... 头顶部偏移量

每次先读最后四个字节(INTEGER)取出头部并拆分`
写入时,读出头部后,记得删掉旧的头部,写入,生成新头,写入
 
谢谢,我先试一下,如何有个范例就更好了,是是初学的菜鸟,再次感谢
 
后退
顶部