帮我看看这篇文章,好吗?拜托你了
http://www.yesky.com/20030311/1656296_1.shtml
执行解压缩的时候到下面这句就出错了,说是“stream write error”,我用的是Delphi7。
DestStream.WriteBuffer(Buffer^,Count);这是我的程序
function TdataM.zipFile(sourceFile, destFile: string): boolean;
var
FileNameStream,Deststream:TMemoryStream;
SourceStream:TCompressionStream;
begin
result:=false;
try
FileNameStream:=TMemoryStream.Create;
FileNameStream.LoadFromFile(sourceFile);
Deststream:=TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(clMax, DestStream);
FileNameStream.SaveToStream(SourceStream);
DestStream.SaveToFile(destFile);
result:=true;
finally
SourceStream.Free;
FileNameStream.Free;
Deststream.Free;
end;
end;function TdataM.unzipFile(sourceFile, destFile: string): boolean;
var
dataStream,DestStream:TMemoryStream;
SourceStream: TDeCompressionStream;
count:integer;
Buffer:pointer;
begin
result:=false;
try
dataStream:=TMemoryStream.Create;
DestStream:=TMemoryStream.Create;
dataStream.LoadFromFile(sourceFile);
dataStream.Position := 0;
dataStream.ReadBuffer(Count, Sizeof(Count));
GetMem(Buffer,Count);
SourceStream := TDecompressionStream.Create(dataStream);
SourceStream.ReadBuffer(Buffer^,Count);
DestStream.WriteBuffer(Buffer^,Count);
DestStream.Position := 0;
DestStream.SaveToFile(destFile);
result:=true;
finally
dataStream.Free;
DestStream.Free;
SourceStream.Free;
end;
end;
http://www.yesky.com/20030311/1656296_1.shtml
执行解压缩的时候到下面这句就出错了,说是“stream write error”,我用的是Delphi7。
DestStream.WriteBuffer(Buffer^,Count);这是我的程序
function TdataM.zipFile(sourceFile, destFile: string): boolean;
var
FileNameStream,Deststream:TMemoryStream;
SourceStream:TCompressionStream;
begin
result:=false;
try
FileNameStream:=TMemoryStream.Create;
FileNameStream.LoadFromFile(sourceFile);
Deststream:=TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(clMax, DestStream);
FileNameStream.SaveToStream(SourceStream);
DestStream.SaveToFile(destFile);
result:=true;
finally
SourceStream.Free;
FileNameStream.Free;
Deststream.Free;
end;
end;function TdataM.unzipFile(sourceFile, destFile: string): boolean;
var
dataStream,DestStream:TMemoryStream;
SourceStream: TDeCompressionStream;
count:integer;
Buffer:pointer;
begin
result:=false;
try
dataStream:=TMemoryStream.Create;
DestStream:=TMemoryStream.Create;
dataStream.LoadFromFile(sourceFile);
dataStream.Position := 0;
dataStream.ReadBuffer(Count, Sizeof(Count));
GetMem(Buffer,Count);
SourceStream := TDecompressionStream.Create(dataStream);
SourceStream.ReadBuffer(Buffer^,Count);
DestStream.WriteBuffer(Buffer^,Count);
DestStream.Position := 0;
DestStream.SaveToFile(destFile);
result:=true;
finally
dataStream.Free;
DestStream.Free;
SourceStream.Free;
end;
end;
var
I: Integer;
vBuffer: array[0..cBufferSize]of Char;
begin
Result := -1;
if not (Assigned(mInputStream) and Assigned(mOutputStream)) then Exit;
with TCompressionStream.Create(clMax, mOutputStream) do try
for I := 1 to mInputStream.Size div cBufferSize do begin
mInputStream.Read(vBuffer, cBufferSize);
Write(vBuffer, cBufferSize);
end;
I := mInputStream.Size mod cBufferSize;
if I > 0 then begin
mInputStream.Read(vBuffer, I);
Write(vBuffer, I);
end;
finally
Free;
end;
end; { StreamCompression }function StreamDecompression(mInputStream: TStream; mOutputStream: TStream): Integer;
var
vBuffer: array[0..cBufferSize]of Char;
I: Integer;
begin
Result := -1;
if not (Assigned(mInputStream) and Assigned(mOutputStream)) then Exit;
with TDecompressionStream.Create(mInputStream) do try
repeat
I := Read(vBuffer, cBufferSize);
mOutputStream.Write(vBuffer, I);
until I = 0;
Result := mOutputStream.Size;
finally
Free;
end;
end; { StreamDecompression }function zipFile(sourceFile, destFile: string): boolean;
var
vSourceFileStream, vDestFileStream: TFileStream;
begin
vSourceFileStream := TFileStream.Create(sourceFile, fmOpenRead);
vDestFileStream := TFileStream.Create(destFile, fmCreate);
try
Result := StreamCompression(vSourceFileStream, vDestFileStream) > 0;
finally
vSourceFileStream.Free;
vDestFileStream.Free;
end;
end;function unzipFile(sourceFile, destFile: string): boolean;
var
vSourceFileStream, vDestFileStream: TFileStream;
begin
vSourceFileStream := TFileStream.Create(sourceFile, fmOpenRead);
vDestFileStream := TFileStream.Create(destFile, fmCreate);
try
Result := StreamDecompression(vSourceFileStream, vDestFileStream) > 0;
finally
vSourceFileStream.Free;
vDestFileStream.Free;
end;
end;//Example
procedure TForm1.Button1Click(Sender: TObject);
begin
zipFile('c:\temp\temp.dat', 'c:\temp\temp2.z');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
unzipFile('c:\temp\temp.z', 'c:\temp\temp3.dat');
end;