请大家帮帮我吧!!!(50分)

  • 主题发起人 主题发起人 amer
  • 开始时间 开始时间
A

amer

Unregistered / Unconfirmed
GUEST, unregistred user!
Function TForm1.AddToFile(SourceFile,TargetFile:String):Boolean;
var
Source,Target:TFileStream;
FileSize: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);
Filesize:=Source.Size+ sizeof(SourceFile);
Target.WriteBuffer(FileSize, Sizeof(FileSize));
finally
Target.Free;
Source.Free;
end;
except
Result:=False;
Exit;
end;
Result:=True;
showmessage('写入成功!');
end;
--------------------------------------------------------------------------------
为什么Filesize:=Source.Size+ sizeof(SourceFile);里的sizeof(sourcefile)总是4呢?
还有如果source.size是文件的大小了,那sizeof(sourefile)是什么东西啊,
代表什么意思???谢谢了,,请帮我!!!!!!!

 
这里的sizeof返回的好象String的长度啊!
 
从Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive );
看,SourceFile应该是String;
Sizeof((SourceFile)是String类的字节长。即占4个字节位。
等价为Sizeof(String)
常用的有Sizeof(Integer),即整型占用的字节长度。也是4。
 
Source.Size是文件大小
sizeof(SourceFile)是变量SourceFile的占用内存的大小
 
sizeof(SourceFile)是指针的大小!
 
来晚了!我同意“秋之叶”的看法
 
string型其实是一个指针类型
 而用sizeof(指针类型)测出来的是指针本身所占的内存大小。
在32位平台里,指针本身占据了4个字节的长度。
例:
var
p: pointer;
pp: pchar;
begin
showmessage(inttostr(sizeof(p)));
showmessage(inttostr(sizeof(pp)));
end;
 


谢谢!!
 
多人接受答案了。
 
后退
顶部