我的压缩程序已经运行成功,下面是我的解压缩代码:
procedure TCompressionform.DeCompressStream(SourceStream, DeskStream: TStream);//
const
SixK=$ffff; //65535
var
DeCompStream:TDecompressionStream;
Data:array[1..SixK] of Char;
Count:Integer;
begin
SourceStream.Position:=0;
DeCompStream:=TDecompressionStream.Create(SourceStream);
DeskStream.Position :=0;
try
repeat
Count:=DeCompStream.Read(Data,SixK);
if Count>0 then DeskStream.Write(Data,Count);
until Count=0;
finally
DeCompStream.Free;
end;
DeskStream.Position :=0;
end;
procedure TCompressionform.DeCompressFiles(DirStr:String;filelist:TStrings;DestStream:TStream);
var
FileNum,i,CurrentPos:Integer;
FS:TMyFileStruct;
SourceStream:TFilestream;
TempStream:TMemoryStream;
begin
FileNum:=filelist.Count;
TempStream:=TMemoryStream.Create;
DestStream.ReadBuffer(fileNum,sizeof(FileNum)); //定义一快类存区域将其读进去
CurrentPos:=FileNum*SizeOf(FS)+SizeOf(FileNum);
for i:=0 to FileNum-1 do
begin FS.FileName:=extractfilename(filelist[i]);
TempStream.Clear;
DestStream.Position:=i*SizeOf(FS)+SizeOf(FileNum);
DestStream.ReadBuffer(FS,SizeOf(FS)); //先读出来然后在解压缩
sourceStream:=TFilestream.Create(filelist[i],fmShareDenyRead);
DeCompressStream(SourceStream,TempStream);
fs.FileSize:=TempStream.Size;
DestStream.Position :=CurrentPos;
CurrentPos:=CurrentPos+SourceStream.CopyFrom(DestStream,FS.FileSize);
sourceStream.Free;
TempStream.SaveToFile(DirStr+FS.FileName);
end;
TempStream.Free;
end;procedure TCompressionform.bt2Click(Sender: TObject); //解压
var
Fg:TMemoryStream;
begin
Fg:=TMemoryStream.Create;
Fg.Position:=0;
DeCompressFiles(FMsystemdir,memo1.Lines,Fg);
messagedlg('恭喜您操作成功',mtinformation,[mbok],0);
end;
为什么我在运行的时候总是出现stream read error 的错误啊
并且错误出现在DestStream.ReadBuffer(fileNum,sizeof(FileNum))这一行啊
请问各路高手是什么原因啊
procedure TCompressionform.DeCompressStream(SourceStream, DeskStream: TStream);//
const
SixK=$ffff; //65535
var
DeCompStream:TDecompressionStream;
Data:array[1..SixK] of Char;
Count:Integer;
begin
SourceStream.Position:=0;
DeCompStream:=TDecompressionStream.Create(SourceStream);
DeskStream.Position :=0;
try
repeat
Count:=DeCompStream.Read(Data,SixK);
if Count>0 then DeskStream.Write(Data,Count);
until Count=0;
finally
DeCompStream.Free;
end;
DeskStream.Position :=0;
end;
procedure TCompressionform.DeCompressFiles(DirStr:String;filelist:TStrings;DestStream:TStream);
var
FileNum,i,CurrentPos:Integer;
FS:TMyFileStruct;
SourceStream:TFilestream;
TempStream:TMemoryStream;
begin
FileNum:=filelist.Count;
TempStream:=TMemoryStream.Create;
DestStream.ReadBuffer(fileNum,sizeof(FileNum)); //定义一快类存区域将其读进去
CurrentPos:=FileNum*SizeOf(FS)+SizeOf(FileNum);
for i:=0 to FileNum-1 do
begin FS.FileName:=extractfilename(filelist[i]);
TempStream.Clear;
DestStream.Position:=i*SizeOf(FS)+SizeOf(FileNum);
DestStream.ReadBuffer(FS,SizeOf(FS)); //先读出来然后在解压缩
sourceStream:=TFilestream.Create(filelist[i],fmShareDenyRead);
DeCompressStream(SourceStream,TempStream);
fs.FileSize:=TempStream.Size;
DestStream.Position :=CurrentPos;
CurrentPos:=CurrentPos+SourceStream.CopyFrom(DestStream,FS.FileSize);
sourceStream.Free;
TempStream.SaveToFile(DirStr+FS.FileName);
end;
TempStream.Free;
end;procedure TCompressionform.bt2Click(Sender: TObject); //解压
var
Fg:TMemoryStream;
begin
Fg:=TMemoryStream.Create;
Fg.Position:=0;
DeCompressFiles(FMsystemdir,memo1.Lines,Fg);
messagedlg('恭喜您操作成功',mtinformation,[mbok],0);
end;
为什么我在运行的时候总是出现stream read error 的错误啊
并且错误出现在DestStream.ReadBuffer(fileNum,sizeof(FileNum))这一行啊
请问各路高手是什么原因啊
Fg:TMemoryStream;
begin
Fg:=TMemoryStream.Create;
Fg.Position:=0;
//fg is empty
DeCompressFiles(FMsystemdir,memo1.Lines,Fg);
procedure TCompressionform.DeCompressFiles(DirStr:String;filelist:TStrings;DestStream:TStream);
begin
...
DestStream.ReadBuffer(fileNum,sizeof(FileNum)); //定义一快类存区域将其读进去
//??? read the empty stream???