数据流压缩问题 急 ! 请问为什么数据流压缩后savetofile 成.txt文件,和用数据集load压缩后的数据集,再savetofile成.txt文件,两者不相同,有何解决办法。问题解决马上结帖。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问题:把数据流保存到某个TXT文本中,在用ClientDataSet控件Load进来,然后在用ClientDataSet保存到另一个TXT文本中,两个TXT的大小不一样。procedure Tfrm_detail_contract.compressFile(dataset :Tclientdataset);varCompressLevel: TCompressionLevel;SourceFileStream: TFileStream;CompressStream: TCompressionStream;MemStream,DestMemStream: TMemoryStream;NewStream :TMemoryStream ;Buffer: PChar;Count,MemSize: Longint;beginCompressLevel:= clDefault;trydataset.SaveToFile('d:\raw1.txt',dfbinary);SourceFileStream := TFileStream.Create('d:\raw1.txt', fmOpenRead); //打开源文件Count := SourceFileStream.size; //读出源文件大小GetMem(Buffer, Count);MemStream := TMemoryStream.Create;NewStream := TMemoryStream.Create;DestMemStream := TMemoryStream.Create;CompressStream := TCompressionStream.Create(CompressLevel, DestMemStream);trySourceFileStream.ReadBuffer(Buffer^, Count); //将源文件内容读到Buffer中MemStream.WriteBuffer(Buffer^, Count); //将Buffer内容读到MemStream中MemSize := MemStream.Size; //记录原始文件尺寸MemStream.SaveToStream(CompressStream); //将MemStream内容压缩保存在DestMemStream中CompressStream.Free;MemStream.Clear; //清空MemStream内容MemStream.WriteBuffer(MemSize, SizeOf(MemSize)); //写入原始文件尺寸MemStream.CopyFrom(DestMemStream, 0 ); //将压缩过的文件流DestMemStream内容拷贝到MemStream中// MemStream.Seek(0,0);*********************************************************************MemStream.SaveToFile('d:\compressed.txt'); //保存为compressed.txt文件frm_C_DM.TmpCDSCmpress.LoadFromStream(MemStream);frm_C_DM.TmpCDSCmpress.SaveToFile('d:\compressed1.txt') ;//保存为compressed1.txt文件//compressed.txt 和文件compressed1.txt 大小不相等**********************************************************************showmessage('successful!')//result := true;finallyFreeMem(Buffer);MemStream.Free; DestMemStream.Free; SourceFileStream.Free;end;exceptshowmessage('failed!')//result := false;end; txt的内容一样吗?有时文件占用的磁盘空间会有出入的 看不出来有什么错误,除非frm_C_DM.TmpCDSCmpress这个东西,frm_C_DM.TmpCDSCmpress是什么对象? 内容是不一样的,可能是因为这样才导致两个文件的大小 不相同,也使得数据集load的stream和tmemortstream load的stream不等价。 to JavaD(一竿残照):TClientDataset ( 代码是直接copy的,) cds的LoadFormStream是需要特殊格式的,你自定义的一个压缩格式当然不行,你不能将cds的LoadFromStream和TStream及其派生类的LoadFromStream方法混淆 to JavaD(一竿残照):你是说格式不对,那,有什么办法能让保存到内存流的东西,放到数据集中呢,谢谢 delphi有没有通过选择、点击就能取得日期、时间的组件? 文本筛选 求下面数字间算法 求 delphi6.0 下载 请问如何实现STRINGGRID中的文字根据列的宽度自动缩小 如何确定一个弹出窗口关闭后再执行其他操作? 我怎样判断ADOQUERY关闭了? 请高手们参考一下用什么数据库为好?pardox,acess,ms sql 急! 在关闭我程序时候总提示:内存不能读,很讨厌,能不能用try给过滤了? 由金山英文写作助理想到一种木马机制 急 流数据回传 Scktsrvr 问题
procedure Tfrm_detail_contract.compressFile(dataset :Tclientdataset);
var
CompressLevel: TCompressionLevel;
SourceFileStream: TFileStream;CompressStream: TCompressionStream;
MemStream,DestMemStream: TMemoryStream;
NewStream :TMemoryStream ;
Buffer: PChar;
Count,MemSize: Longint;
begin
CompressLevel:= clDefault;
try
dataset.SaveToFile('d:\raw1.txt',dfbinary);
SourceFileStream := TFileStream.Create('d:\raw1.txt', fmOpenRead); //打开源文件
Count := SourceFileStream.size; //读出源文件大小
GetMem(Buffer, Count);
MemStream := TMemoryStream.Create;
NewStream := TMemoryStream.Create;
DestMemStream := TMemoryStream.Create;
CompressStream := TCompressionStream.Create(CompressLevel, DestMemStream);
try
SourceFileStream.ReadBuffer(Buffer^, Count); //将源文件内容读到Buffer中
MemStream.WriteBuffer(Buffer^, Count); //将Buffer内容读到MemStream中
MemSize := MemStream.Size; //记录原始文件尺寸
MemStream.SaveToStream(CompressStream); //将MemStream内容压缩保存在DestMemStream中
CompressStream.Free;
MemStream.Clear; //清空MemStream内容
MemStream.WriteBuffer(MemSize, SizeOf(MemSize)); //写入原始文件尺寸
MemStream.CopyFrom(DestMemStream, 0 ); //将压缩过的文件流DestMemStream内容拷贝到MemStream中
// MemStream.Seek(0,0);
*********************************************************************
MemStream.SaveToFile('d:\compressed.txt'); //保存为compressed.txt文件
frm_C_DM.TmpCDSCmpress.LoadFromStream(MemStream);
frm_C_DM.TmpCDSCmpress.SaveToFile('d:\compressed1.txt') ;//保存为compressed1.txt文件
//compressed.txt 和文件compressed1.txt 大小不相等
**********************************************************************
showmessage('successful!')//result := true;
finally
FreeMem(Buffer);
MemStream.Free; DestMemStream.Free; SourceFileStream.Free;
end;
except
showmessage('failed!')
//result := false;
end;
除非frm_C_DM.TmpCDSCmpress这个东西,
frm_C_DM.TmpCDSCmpress是什么对象?
你不能将cds的LoadFromStream和TStream及其派生类的LoadFromStream方法混淆
你是说格式不对,那,有什么办法能让保存到内存流的东西,放到数据集中呢,谢谢