我使用Delphi编写了一个Zip实用程序,它可以压缩目录树,但只包含某些类型的文件。目标是创建一个实用程序,该实用程序将创建一个zip文件包,以便远程处理。
在我的第一次尝试中,我能够创建一个zip文件并在Windows平台上提取完整的目录树,但是在发送到远程系统时它们没有被处理。我发现在IOS上查看或解压缩时,zip文件似乎松散了目录结构,我怀疑这是问题所在。
在对Stack溢出和web进行一些研究后,我用目录路径中的正斜杠替换了反斜杠。这没有任何区别。目录结构和静态文件在Windows上完美提取,但不在IOS上提取,也不会在亚马逊平台上提取,最终会自动处理这些文件。
我用来添加具有匹配文件扩展名的文件的代码如下。我在这里缺少什么 - 创建完全可移植的zip文件的秘诀是什么?
procedure TFORM2.FileSearch(Zip: TZipFile; const PathName: string; RootPos: Integer);
const
FileMask = '*.*';
Extensions = '.csv,.xml,.txt,.jpg'; // File types we want to zip
var
Rec: TSearchRec;
Path: string;
FromPath, ToPath: String;
begin
Path := Trim(IncludeTrailingBackslash(PathName));
if FindFirst(Path + FileMask, faAnyFile - faDirectory, Rec) = 0 then
try
repeat
if AnsiPos(ExtractFileExt(Rec.Name), Extensions) > 0 then
Begin
FromPath := Path + Rec.Name ;
ToPath := copy(Path, RootPos, path.Length - rootpos + 1) + Rec.Name;;
ToPath := StringReplace(ToPath,'\','/',[rfReplaceAll]);
Zip.Add(FromPath, ToPath);
File_Count := File_Count + 1
End;
until FindNext(Rec) <> 0;
Except
on E:EZipException do
Begin
ShowMessage('Exception: ' + E.Message);
End;
End;
FindClose(Rec);
if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
try
repeat
if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name <> '.') and
(Rec.Name <> '..') then
FileSearch(Zip, Path + Rec.Name, RootPos);
until FindNext(Rec) <> 0;
Except
on E:EZipException do
Begin
ShowMessage('Exception: ' + E.Message);
End;
end;
FindClose(Rec);
End;