为什么我将一个Word文件读入文件流,再将此文件流中的数据保存成一个Word文件,数据不一样.(50分)

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

zhiqunluodelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么我将一个Word文件读入文件流,再将此文件流中的数据保存成一个Word文件,
数据不一样.请大家帮帮忙,看看,先谢了.
如:
var
//dd :TStringList;
vv : string;
ss,ww :TFileStream;
buff : array of byte;
begin
//dd := TStringList.Create;
ss := TFileStream.Create('c:/1.doc',fmOpenRead);
ww := TFileStream.Create('c:/2.doc',fmCreate );
ss.Seek(0,soFromBeginning);
//dd.LoadFromStream( ss);
//ShowMessage(dd.text);
// dd.free;
// SetString(vv,nil,ss.size);
// ss.ReadBuffer(Pointer(vv)^,ss.size);
FillChar(buff, SizeOf(Sendbuf),0);
SetLength(buff,ss.size);
ShowMessage(InttoStr(length(buff));
ss.Read(buff,ss.size);
// ww := TFileStream.Create('2.doc',fmCreate and fmShareCompat);
ww.Write(buff,length(buff));
// ww.free;
// ss.Free;
ss.Destroy;
ww.Destroy;
end;
 
你的Buffer是动态数组,如果是静态数组的话你的方法没问题。
因为流的草所实际上是对数据的存储地址操作,而动态数组的
地址和动态数组数据的地址不是一个概念。
读取和写入流的时候不要把Buffer串进去。只传动态数组的第一个元素。
全部改成如下形式
ss.Read(buff[0],ss.size);
ww.Write(buff[0],length(buff));
 
ww.Write(buff,length(buff)); //这行有问题, 改成
ww.Write(buff[0],ss.Size);
读也一样
 
多人接受答案了。
 
后退
顶部