我已经下载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
。那是一个抽象的基类。您必须实例化具体的流类,例如TMemoryStream
或TFileStream
。我还必须敦促您使用
try/finally
确保不会泄漏要管理其生命周期的对象。最后,我可以注册对
with
语句的不信任吗?这已经被讨论了很多次,并且少量的网络搜索将揭示有关该主题的许多文章。也许这一次您摆脱了它,但是它会在某个时候咬住您。关于delphi - TZipForge + ExtracttoStream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45935164/