在Windows平台上使用Delphi TZipfile创建的Zip文件无法移植到其他操作系统

时间:2018-05-07 07:31:06

标签: delphi zip compatibility

我使用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;

0 个答案:

没有答案