0

アーカイブ ファイル内のファイルを操作する必要がありますか。(読み書き)。次のコードで、必要なファイルのリストを取得します。

Zip := TZipFile.Create;
  try
    Zip.Open(FilePath, TZipMode.zmRead);
    For File_Name in Zip.FileNames do
    begin
      //some code
    end;
  finally
    Zip.Close;
    FreeAndNil(Zip);
  end;

TZipFile.Readメソッドを使用して、.zip アーカイブからファイルを読み取りました。

このメソッドは、ファイルの内容全体を TByte 型のバッファに返します。ただし、完全なファイルではなく、最初から 1MB のファイルを読み取る必要があります。

1MB のファイルを読み取って分析した後、必要に応じて、完全なファイルを読み取ってファイルに変更を加え、ファイルをアーカイブに再保存する必要があります。

プログラムのメモリと速度は非常に重要です。以前は SetLength 関数のバッファ サイズを設定していましたが、残念ながらファイル ファイルの完全な内容がバッファに格納されています。

どう思いますか?

4

1 に答える 1

1

の代わりにTZipFile.Read()を返すオーバーロードされたバージョンを使用してください。そうすれば、ファイル全体をメモリに読み込む必要がなく、必要に応じて最初のバイトだけを読み取ることができます。TStreamTBytes

残念ながら、を使用してzipアーカイブ内のデータを変更する方法はありませんTZipFileExtract()特定のファイルを作成し、必要に応じて外部で変更してから、Add()に戻すことはできますが、で特定のファイルTZipFileを削除/置換する方法はありませんTZipFileTZipFileはシンプルなフレームワークであり、zipアーカイブを読み取って新しいファイルを追加することしかできません。zipアーカイブをさらに制御する必要がある場合は、ZipForgeなどのより完全なサードパーティソリューションを使用することをお勧めします。

于 2013-02-03T22:48:01.567 に答える