使用Delphi XE,TZipMaster 1.91(最新版)
我想获得与传递给Find函数的FSpec arg匹配的第一个文件名的文件名。但是,我在调用此函数时遇到访问冲突。
var
DBBakFl : String;
d : Integer;
begin
ZipMaster191.ZipFileName := 'myzip.zip';
try
DBBakFl := ZipMaster191.Find('*.FBK', d).FileName;
except
raise Exception.Create('Find raised an exception');
end;
任何帮助表示感谢。
编辑: 我发了一封电子邮件,得到了该组件的一位作者Russell Peters的即时答复。 请参阅下面的答案。
答案 0 :(得分:2)
尝试类似:
var
DBBakFl : String;
d : Integer;
DirEntry: TZMDirEntry;
begin
ZipMaster191.ZipFileName := 'myzip.zip';
DirEntry := ZipMaster191.Find('*.FBK', d);
if Assigned(DirEntry) then
begin
DBBakF1 := DirEntry.FileName;
....
end;
由于查找失败,您正在尝试的是从nil TZMDirEntry获取文件名。基本上与:
相同var
DBBakFl : String;
DirEntry: TZMDirEntry;
begin
DirEntry := nil;
DBBakF1 := DirEntry.FileName;
end;
答案 1 :(得分:1)
如果对Find的调用失败,则不会返回有效的TZMDirEntry实例,因此您无法访问FileName属性。
尝试将Find的结果分配给变量并在尝试访问其属性或方法之前检查其是否有效。也许这样的事情。文档显示TZMDirEntry是一个抽象类,因此您可能需要使用后代类。
var
DBBakFl : String;
d : Integer;
lDirEntry: TZMDirEntry;
begin
ZipMaster191.ZipFileName := 'myzip.zip';
lDirEntry := ZipMaster191.Find('*.FBK', d);
if Assigned(lDirEntry) then
DBBakFl := lDirEntry.FileName
else
ShowMessage('file not found');
答案 2 :(得分:1)
我发了一封电子邮件,得到了该组件的一位作者Russell Peters的即时答复:
我得到AV
并不奇怪var Idx: Integer; Entry: TZMDirEntry; DBBakFl : String; begin try Idx := -1; // search from beginning, starts at Idx + 1 Index := ZipMaster191.Find('*.FBK', Idx); if Index <> nil then DBBakFl := Index .FileName; except raise Exception.Create('Find raised an exception'); end; OR var Idx: Integer; DBBakFl : String; begin try Idx := -1; // search from beginning, starts at Idx + 1 if ZipMaster191.Find('*.FBK', Idx) <> nil then DBBakFl := ZipMaster191[Idx].FileName; except raise Exception.Create('Find raised an exception'); end; OR var Idx: Integer; DBBakFl : String; begin try Idx := -1; // search from beginning, starts at Idx + 1 ZipMaster191.Find('*.FBK', Idx) ; if Idx >= 0 then DBBakFl := ZipMaster191[Idx].FileName; except raise Exception.Create('Find raised an exception'); end; In a loop it is easy Idx := -1; while ZipMaster191.Find('*.FBK', Idx) <> nil do begin DBBakFl := ZipMaster191[Idx].FileName;
罗素彼得斯