Delphi FMX (Android) - 如何读取 zip 流中的文本文件而不解压?

标签 delphi firemonkey zip

是否可以从 zip 文件中读取文件而不解压它?我想从备忘录行中的压缩文件(作为 Android Assets )读取文本文件。

ZipFile := TZipFile.Create; //Zipfile: TZipFile
try
 ZipFile.Open('C:\Path\to\file.zip', zmRead);
  for I := 0 to ZipFile.FileCount - 1 do
begin
if ZipFile.FileNames[I]='A1.txt' then //S: string
//My problem is here ? How load A1.txt to memo lines?
Memo1.Lines.Add(S);
end;
ZipFile.Close;
finally
ZipFile.Free;
end;

最佳答案

TZipFile 具有公共(public) Read()方法允许您获取完整解压文件的 TBytes 或用于动态读取解压字节的 TStream。您可以根据需要使用这些字节写入 TMemo

例如,使用TStream,您可以将文件中的字节读入本地缓冲区,直到遇到换行符,然后将缓冲区添加到TMemo并清除缓冲区,重复直到到达 TStream 的末尾。

请注意,无论哪种情况,您都将访问文本文件的原始字节,而TMemo需要Unicode字符串,因此您必须转换字节根据文本文件的实际编码,转换为 Unicode,例如使用 SysUtils.TEncoding。例如,如果文本文件采用 UTF-8 编码,则使用 TEncoding.UTF8TEncoding 具有用于将 TBytes 数据转换为 UnicodeStringGetString() 方法。

关于Delphi FMX (Android) - 如何读取 zip 流中的文本文件而不解压?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62474627/

相关文章:

delphi - 如何使 TProgressColumn 与 LiveBindings 和数据集一起使用时工作

ios - 从存档中解压缩单个文件

delphi - 如何设置FMX.Panel颜色?

java - 在多个主机上使用Java中的zip算法压缩文件

PHP .zip 下载失败,错误为 'Content-Length'

delphi - 如何借助 DataSet 在 TAdvStringGrid 中显示数据库中的 BLOB 图像

xml - 如何在OmniXML中替换节点xml?

windows - 使用 BHO 时 IE 上的运行时错误 216

arrays - Delphi-在数组中搜索对象

delphi - 动态创建的 FireMonkey TPopupMenu 不弹出