从此不再编程!太难了。(27分)

  • 主题发起人 主题发起人 lah998
  • 开始时间 开始时间
出错报告出错!
 
出什么错啊?
 
DecompressStream ....error

我看不懂
 
那你改回去,再加一行看看:
sz := inpStream.Size - inpStream.Position

[red]ShowMessage(IntToStr(sz));[/red]
 
procedure DecompressStream(inpStream, outStream: TStream);//解压过程
这个解压过程不是我写的,
我把他用在单个的文件上是可以的。怎么用到这里就不可以了
 
//那你改回去,再加一行看看:
// sz := inpStream.Size - inpStream.Position

//[red]ShowMessage(IntToStr(sz));[/red]

是0
 
呵呵,再改:
[red]ShowMessage(IntToStr(inpStream.Size));[/red]
[red]ShowMessage(IntToStr(inpStream.Position));[/red]
sz := inpStream.Size - inpStream.Position

多少?
 
相等都是文件大小1400
 
那说明还是文件指针没有被设置,应该是这样:
inpStream.Position := 0;
sz := inpStream.Size;

但是你说这样会引发错误,可能是你的
DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
的参数传递问题,我没有 zlib 的源代码,不知道到底应该怎么传,猜一下吧:
可能需要先给 OutBuf 分配空间,或者你传的那个 0 不对,这样试一试:
GetMem(OutBuf, sz * 2);
DecompressBuf(InpBuf, sz, sz * 2, OutBuf, OutBytes);


 
不要编程了,呵
 
beta,:同样报告出错!既然你帮我找到原因了,结贴!可惜我只有仅有的27分了,
 
接受答案了.
 
记住,任何时候都不要放弃!:)

 
你的错误应在下面的语句 !
Ms.LoadFromFile('c:/123.jmi');//是我压缩后的文件假设里面含有三个文件,把它打开
...
Ms.Position :=0;
Fs.CopyFrom(Ms,MyInt)//假设第一个文件大小是MyInt.
//Fs的Position此时应为MyInt ,要设置Fs.posittion:=0;
//否则 下面sz几时都为0! 故你的文件当然为空啦
// sz := inpStream.Size - inpStream.Position

// if sz > 0 then

DecompressStream(Fs,MyMsFile);//解压第一个文件
MyMsFile.SaveToFile(MyFile);//保存第一个文件(为什么这个文件是空的!!!)
FINALLY
 
chji,://Fs的Position此时应为MyInt ,要设置Fs.posittion:=0;
如果设置Fs.posittion:=0,程序就出错!
 
To:lah998
我刚才用delphi7.0试了一下上面的代码! 成功解压出所有的文件!
你能贴出你完整的代码出来吗?
 
谢谢各位!我的问题解决了!
是我自己范的错文件大小搞错了压缩前和压缩后的大小不一样!
特别感谢beta告诉我用showmessage查错的方法!
感谢chji,告诉我代码没错!
 
后退
顶部