Delphi - 以只读方式打开 zip 文件

标签 delphi zip

我使用内部 TZipFile。 当我打开 zip 时,Delphi 似乎只打开它。 只要 zip 文件没有被释放,文件访问就会被拒绝

lZipFile := tZipFile.Create;
if lZipFile.IsValid( sPath) then begin
  lZipFile.Open( sPath, zmRead );
...
// access denied to sPath
end;
lZipFile.Free;

我只想读书。为什么delphi会这样? 如果我想多次访问一个 zip 文件,那么我必须制作一个本地副本并使用该副本吗?我真的不喜欢这个解决方法。首先,因为 zip 文件可能很大。

知道如何才能以只读模式同时多次访问同一个 zip 吗?

最佳答案

您可以创建一个以所需共享模式打开的TFileStream实例。然后使用 TZipFile 的重载 Open 方法来接受 TStream

请注意,TZipFile.IsValid 也会尝试以独占方式打开文件。由于 IsValid 不做 Open 所做的事情,因此我添加了一个 try- except block 来捕获任何无效或无法访问的目标。因此可以省略对 IsValid 的调用。

  zip := TZipFile.Create;
  try
    stream := TFileStream.Create(sPath, fmOpenRead + fmShareDenyWrite);
    try
      try
        zip.Open(stream, zmRead);
      except
        on EZipException do begin
          // access denied to sPath
        end;
      end;
    finally
      stream.Free;
    end;
  finally
    zip.Free;
  end;

关于Delphi - 以只读方式打开 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38115296/

相关文章:

delphi - MSBuild 中的空行而不是任务控制台输出

.net core 在内存 zipfile 上创建

unix - tar 和 zip 有什么区别?

python - ZIp 仅目录内容,不包括父目录

linux - tar -czf 的结果

ios - 无法启动使用 Delphi XE8 开发的 iOS 应用程序

Delphi 7 32位执行并等待64位进程

德尔福错误: "Cannot focus a disabled or invisible window"

delphi - TChartSeries.onClick 问题

unix - 不包含压缩目录本身的 Zip 命令