100分求解,用流存文件的疑惑(100分)

  • 主题发起人 主题发起人 blackhand
  • 开始时间 开始时间
B

blackhand

Unregistered / Unconfirmed
GUEST, unregistred user!

var
mDumpBuffer: array of Char;
ss:TStringList;
st:string;
tmpStream:TMemoryStream;
 Stream: IStream;

//...
//读入数据
repeat
SetLength(mDumpBuffer, TotalRead + 64);
OleCheck(Stream.Read(@mDumpBuffer[TotalRead], 64, @BytesRead));

TotalRead := TotalRead + BytesRead;
until BytesRead <> 64;
SetLength(mDumpBuffer, TotalRead);

//写数据到文件
//方法一:
st:='';
For I:=0 to length(mDumpBuffer)-1 do
st := st + mDumpBuffer;
ss:=TStringList.Create;
ss.Add(st);
ss.SaveToFile('c:/ttt/temp1.txt');
ss.Free;

//方法二:
tmpStream:=TMemoryStream.Create;
tmpStream.write(stream,length(mDumpBuffer));
tmpStream.SaveToFile('c:/ttt/temp1.txt');
tmpStream.free;

//方法三:
tmpStream:=TMemoryStream.Create;
tmpStream.write(mDumpBuffer,length(mDumpBuffer));
tmpStream.SaveToFile('c:/ttt/temp1.txt');
tmpStream.free;

以上只有方法一正确,后二者都是错误的,应怎样改进,谢谢
 
法三:

tmpStream:=TMemoryStream.Create;
tmpStream.write(mDumpBuffer[0],High(mDumpBuffer) - Low(mDumpBuffer));
tmpStream.SaveToFile('c:/ttt/temp1.txt');
tmpStream.free;
 
加上tmpStream.size 即可
 
存文件可用tfilestream;
 
var tmpStream :TMemoryStream;
mDumpBuffer: array of Char;
x:integer;
begin
SetLength(mDumpBuffer, 64);
for x:=0 to 63 do
mDumpBuffer[x] :=char(65+x);

tmpStream:=TMemoryStream.Create;
tmpStream.write(mDumpBuffer[0],length(mDumpBuffer));
tmpStream.Position :=0 ;
tmpStream.SaveToFile('c:/temp1.txt');
tmpStream.free;

end;

 
用方法一可以,但是不好,它会给整个文件加长2个字节(0D 0A),这是ss.Add(st)一句造成的,
运行showmessage(inttostr(length(ss.Text))+' : '+inttostr(length(st)));一句可以清楚看出。

用方法三,只需改正tmpStream.write(mDumpBuffer,length(mDumpBuffer));一句为
tmpStream.write(mDumpBuffer[0],length(mDumpBuffer));即可,谢谢beta和bigroute的提示[:)][:)]。
我会为你们加分的。

但是,若用方法二的话,需怎样改正呢?

 
后退
顶部