gpt4 book ai didi

delphi - TZipForge + ExtracttoStream

转载 作者:行者123 更新时间:2023-12-01 21:32:53 31 4
gpt4 key购买 nike

我在购买前下载了 TZipforge 来试用。

我在使用 ExtractToStream(...) 函数时遇到了一些麻烦,因为它给了我0015错误(找不到文件),尽管我的代码是这样写的:

curdir 是当前目录。
存档器是 Tzipforge

它基本上是 Component Ace 的原始源代码,并由我进行了一些细微的修改。

procedure TfmMain.Button1Click(Sender: TObject);
VAR
TStr : String;
Ts : TStream;
begin
Ts := TStream.Create();
with Archiver do
begin
FileName := Curdir + '\Archive\test.zip';
showmessage(FileName);
Password := 'testing';
OpenArchive(); // open an existing archive file

ExtractToString('forsiden.html',TStr);

showmessage('filename = ' + filename);

if FileExists('C:\test\zipper\archive\test.zip') then
BEGIN
ExtractToStream('C:\test\zipper\archive\test.zip',TS);
(* c:\TEST\ZIPPER\Archive\ *)
END;

CloseArchive;
Ts.free;
end;
ShowMessage('All files were extracted successfully.');
end;

我(出于测试目的)在原始 BASIC 示例中包含了 ExtracttoStream-function,但我仍然收到“0015 错误”。

我不知道我做错了什么......文件存在(它应该在的位置)并且程序(例程)仍然显示“找不到文件”。 ”

最佳答案

作为一般规则,您应该首先信任您的组件。它告诉你找不到该文件。让我们研究正确的假设。您的来电是:

ExtractToStream('C:\test\zipper\archive\test.zip',TS);

第一个参数是存档中包含的压缩文件的名称。但您已提供存档文件名。您在分配给 Archiver.FileName 时已经指定了存档文件名。当您调用 Archiver.OpenArchive 时,存档文件已打开。因此,您没有理由需要再次提供存档文件名。

存档不包含名为'C:\test\zipper\archive\test.zip'的文件。该消息并不是通知您存档文件不存在,而是通知您尝试提取的文件不存在。

看起来您实际上正在尝试从存档中提取'forsiden.html'。所以正确的调用是:

ExtractToStream('forsiden.html',TS);

但是,由于代码中的另一个错误,这也会失败。您绝不能实例化 TStream。这是一个抽象基类。您必须实例化一个具体的流类,例如 TMemoryStreamTFileStream

我还必须敦促您使用 try/finally 来确保您不会泄漏您负责管理其生命周期的对象。

最后,我可以表示对 with 语句的不信任吗?这个问题已经讨论过很多次了,稍微进行一下网络搜索就会发现很多关于这个主题的文章。也许这一次你侥幸逃脱了惩罚,但在某些时候它会咬你一口。

关于delphi - TZipForge + ExtracttoStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45935164/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com