- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在购买前下载了 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/
我在购买前下载了 TZipforge 来试用。 我在使用 ExtractToStream(...) 函数时遇到了一些麻烦,因为它给了我0015错误(找不到文件),尽管我的代码是这样写的: curdir
我是一名优秀的程序员,十分优秀!