为什么用FileStreem会使文件大小增倍(100分)

  • 主题发起人 主题发起人 gdxkz
  • 开始时间 开始时间
G

gdxkz

Unregistered / Unconfirmed
GUEST, unregistred user!
//下面的代码从a.txt中读取内容,然后存到a2.txt中,结果a2.txt的内容内多了很多空内容
//a.txt [0123456789]
//a2.txt[ 0123456789]
//不知道为什么会这样,请指教。
var
buf:array of byte;
fs1,fs2:tfilestream;
file1,file2:string;
filesize:longword;
begin
file1:='d:/a.txt'; //a.txt的内容为0123456789
file2:='d:/a2.txt';
fs1:=tfilestream.Create(file1,fmopenread or fmshareexclusive);
filesize:=fs1.Size ;
setlength(buf,filesize);
fs1.ReadBuffer(buf,filesize);

fs2:=tfilestream.Create(file2,fmcreate or fmshareexclusive);
fs2.Size:=filesize;
fs2.Writebuffer(buf,filesize);
fs2.Free ;
fs1.Free;
 
这段代码可以实现功能,你的为什么出错正在研究中……
procedure CopyFile(SourceFileName, DestFileName: string);
var
S, T: TFileStream; {文件流}
begin
S := TFileStream.Create(SourceFileName, fmOpenRead);
try
T := TFileStream.Create(DestFileName, fmOpenWrite or fmCreate);
try
T.CopyFrom(S, S.Size);
finally
T.Free;
end;
finally
S.Free;
end;
end;
 
var
buf:array of byte;
fs1,fs2:tfilestream;
file1,file2:string;
filesize:longword;
begin
file1:='d:/a.txt'; //a.txt的内容为0123456789
file2:='d:/a2.txt';
fs1:=tfilestream.Create(file1,fmopenread or fmshareexclusive);
filesize:=fs1.Size ;
setlength(buf,filesize);
fs1.ReadBuffer(buf,filesize);

fs2:=tfilestream.Create(file2,fmcreate or fmshareexclusive);
// fs2.Size:=filesize; //这句是你多出来的空格
fs2.Writebuffer(buf,filesize);
fs2.Free ;
fs1.Free;
 
接受答案了.
 
后退
顶部