两种操作:
第一种
var
inStream,outStream:TFileStream;
memStream:TMemoryStream;
cpStream:TCompressionStream;
size:Integer;
begin
inStream:=TFileStream.Create('abc.txt',fmOpenRead);//abc.txt为一存在文件
outStream:=TFileStream.Create('abc.z',fmCreate);
memStream:=TMemoryStream.Create;
cpStream:=TCompressionStream.Create(clNone,memStream);
try
cpStream.CopyFrom(inStream,0);
size:=outStream.CopyFrom(memStream,0); //问题所在
finally
FreeAndNil(cpStream);
FreeAndNil(memStream);
FreeAndNil(outStream);
FreeAndNil(inStream);
end;
end;
第二种
压缩流采用TFileStream作为目标,也就是
cpStream:=TCompressionStream.Create(clNone,outStream);
那么两种方法产生的输出文件大小相差很多,给人的感觉就是使用TMemoryStream
的时候数据有所丢失。
更奇怪的是,就算都用同一种方法,在两个不同的程序里面输出文件大小也不相同,好像有其他代码影响到TCompressionStream的感觉,但由于不知道是何处故障,请问,这种问题应该如何调试并解决?不胜感激!
第一种
var
inStream,outStream:TFileStream;
memStream:TMemoryStream;
cpStream:TCompressionStream;
size:Integer;
begin
inStream:=TFileStream.Create('abc.txt',fmOpenRead);//abc.txt为一存在文件
outStream:=TFileStream.Create('abc.z',fmCreate);
memStream:=TMemoryStream.Create;
cpStream:=TCompressionStream.Create(clNone,memStream);
try
cpStream.CopyFrom(inStream,0);
size:=outStream.CopyFrom(memStream,0); //问题所在
finally
FreeAndNil(cpStream);
FreeAndNil(memStream);
FreeAndNil(outStream);
FreeAndNil(inStream);
end;
end;
第二种
压缩流采用TFileStream作为目标,也就是
cpStream:=TCompressionStream.Create(clNone,outStream);
那么两种方法产生的输出文件大小相差很多,给人的感觉就是使用TMemoryStream
的时候数据有所丢失。
更奇怪的是,就算都用同一种方法,在两个不同的程序里面输出文件大小也不相同,好像有其他代码影响到TCompressionStream的感觉,但由于不知道是何处故障,请问,这种问题应该如何调试并解决?不胜感激!
Output data is cached internally, written to the output stream only when the internal output buffer is full, all pending output data is flushed when the stream is destroyed.
上面出现的问题似乎和TMemoryStream的关系不是很大,而和TCompressionStream的关系很大,似乎就是最后写入内部缓冲的内容没有写入到内存流,然后这几个对象就被释放了?
继续探索中……
问题算我自己解决的吗?请问管理员,分该怎么办?