oFile:= TFileStream.Create('C:\AllTest.txt', fmOpenReadWrite); DestStream := TMemoryStream.Create;
CompressedStream:= TMemoryStream.Create;
CompressedStream.LoadFromFile('C:\Test.txt'); SourceStream:=TCompressionStream.Create(clDefault, DestStream);
CompressedStream.SaveToStream(SourceStream);
SourceStream.Free;
CompressedStream.Clear; CompressedStream.CopyFrom(DestStream, 0);
CompressedStream.SaveToFile('c:\Test1.tmp');這是一段壓縮的代碼,我希望是當把'C:\Test.txt'壓縮后,不用存到硬盤上當作臨時'c:\Test1.Tmp',
而是直接把壓縮流write入流oFile中如果每次用CompressedStream.SaveToFile('c:\Test1.tmp');再oFile1:= TFileStream.Create('c:\Test1.tmp', fmOpenReadWrite);
oFile.CopyForm(oFile1,0);
我覺得效率好低,所以我想請高手幫一下忙,不勝感激。
CompressedStream:= TMemoryStream.Create;
CompressedStream.LoadFromFile('C:\Test.txt'); SourceStream:=TCompressionStream.Create(clDefault, DestStream);
CompressedStream.SaveToStream(SourceStream);
SourceStream.Free;
CompressedStream.Clear; CompressedStream.CopyFrom(DestStream, 0);
CompressedStream.SaveToFile('c:\Test1.tmp');這是一段壓縮的代碼,我希望是當把'C:\Test.txt'壓縮后,不用存到硬盤上當作臨時'c:\Test1.Tmp',
而是直接把壓縮流write入流oFile中如果每次用CompressedStream.SaveToFile('c:\Test1.tmp');再oFile1:= TFileStream.Create('c:\Test1.tmp', fmOpenReadWrite);
oFile.CopyForm(oFile1,0);
我覺得效率好低,所以我想請高手幫一下忙,不勝感激。
改为
CompressedStream.SaveToStream(oFile);
看可行不
比如你上面的CompressedStream后面是一个压缩后的流,你要解压请看:var
nSize:Int64; //注意,要是你原来用的integer,这里就用integerbegin
... //压缩后假定你的sourceStream、Deststream都没有释放
DestStream.clear;//准备用这个来输出解压的东西
CompressedStream.Seek(0,0,soFromBeginning);
CompressedStream.Read(nSize,SizeOf(nSize));
DestStream.SetSize(nSize);
SourceStream:=TDecompressionStream.Create(CompressedStream);
SourceStream.ReadBuffer(DestStream.Memory^,nSize);//解压到目标流,DestStream里面就是解压的内容了
...
nSize:Int64; //注意,要是你原来用的integer,这里就用integerbegin
... //压缩后假定你的Deststream没有释放
DestStream.clear;//准备用这个来输出解压的东西
CompressedStream.Seek(0,soFromBeginning);
CompressedStream.Read(nSize,SizeOf(nSize));//读出源流的大小
DestStream.SetSize(nSize);
SourceStream:=TDecompressionStream.Create(CompressedStream);
SourceStream.ReadBuffer(DestStream.Memory^,nSize);//解压到目标流,DestStream里面就是解压的内容了