做一个将word文件存入sql数据库的程序,由于不采用压缩,直接存储流,容量太大,于是选择先将流压缩存储,然后再解压流重新生成word提供给用户打开。
用zlib中的TCompressionStream和TDeCompressionStream两个类。
压缩存储的过程没有问题,但是解压缩就出现问题了
procedure DeCompression_Stream(Ainstream,AoutStream: TStream);
var
lDeCompressionStream: TDeCompressionStream;
buf: array[1..512] of byte;
sread: integer;
begin
lDeCompressionStream:=nil;
lDeCompressionStream:=TDeCompressionStream.Create(AinStream);
try
repeat
//读入实际大小
sRead := lDeCompressionStream.Read(buf, sizeof(buf));
if sread > 0 then
AOutStream.Write(buf, sRead);
until (sRead = 0);
finally
lDeCompressionStream.Free;
end;
end;
这是代码,在sRead := lDeCompressionStream.Read(buf, sizeof(buf));处报错“error”
请求各位高手看看
用zlib中的TCompressionStream和TDeCompressionStream两个类。
压缩存储的过程没有问题,但是解压缩就出现问题了
procedure DeCompression_Stream(Ainstream,AoutStream: TStream);
var
lDeCompressionStream: TDeCompressionStream;
buf: array[1..512] of byte;
sread: integer;
begin
lDeCompressionStream:=nil;
lDeCompressionStream:=TDeCompressionStream.Create(AinStream);
try
repeat
//读入实际大小
sRead := lDeCompressionStream.Read(buf, sizeof(buf));
if sread > 0 then
AOutStream.Write(buf, sRead);
until (sRead = 0);
finally
lDeCompressionStream.Free;
end;
end;
这是代码,在sRead := lDeCompressionStream.Read(buf, sizeof(buf));处报错“error”
请求各位高手看看
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, shellapi,Buttons, OleCtnrs;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
ADOQuery1: TADOQuery;
OleContainer1: TOleContainer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
s:string;
implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
if not ADOQuery1.Active then ADOQuery1.Open;
ADOQuery1.Append;
s :=ExtractFileName(OpenDialog1.FileName);
(ADOQuery1.FieldByName('doc') as TBlobField).LoadFromFile(OpenDialog1.filename);
ADOQuery1.Post; end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(ADOQuery1.FieldByName('doc') as TBlobField).savetoFile(ExtractFileDir(Application.ExeName)+'\'+s); // (ADOQuery1.FieldByName('doc') as TBlobField).savetoFile('你要的路径' +s) ;
shellexecute(handle,nil,pchar(s),nil,nil,sw_shownormal);
end; end.