Einzelnen Beitrag anzeigen

Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#1

Unterschied zwischen Debug und Anwendungs-Store Modi bei iOS

  Alt 31. Aug 2014, 19:08
Hi,

ich habe hier ein Problem mit einer 200mb großen Datei die ich für eine App unter iOS laden will. Im Debugmodus klappt das ganze problemlos, aber im Anwendungs-Store-Modes stimmt die Dateigröße nicht und da ich meine Indexinformationen am Dateiende habe sind die Indexdaten natürlich Schrott.

Die Klasse schaut so aus:

Delphi-Quellcode:
unit UMyDB;

interface

uses System.Classes, System.SysUtils;

type
  TIndex = packed record
    Offset: Int64;
    len: Cardinal;
    flags: Cardinal;
  end;

  TMyDB = class
  private
    FStream: TFileStream;
    FIndex: Array of TIndex;
    function GetCount: Cardinal;
  public
    constructor Create(const Filename: String);
    destructor Destroy; override;
    function Read(index: integer; Stream: TMemorystream): Boolean;
    property Count: Cardinal read GetCount;
  end;

implementation

constructor TMyDB.Create(const Filename: String);
var
  len: Cardinal;
  sz: Int64;
begin
  SetLength(FIndex, 0);
  if FileExists(Filename) then
  begin
    FStream := TFileStream.Create(Filename, fmOpenRead);
    FStream.Position := FStream.Size - 4;
    FStream.Read(len, 4);
    SetLength(FIndex, len);
    sz := sizeof(TIndex) * len;
    FStream.Position := FStream.Size - 4 - sz;
    FStream.Read(FIndex[0], sz);
  end;
end;

destructor TMyDB.Destroy;
begin
  FreeAndNil(FStream);
  SetLength(FIndex, 0);
  inherited;
end;

function TMyDB.GetCount: Cardinal;
begin
  result := Length(FIndex);
end;

function TMyDB.Read(index: integer; Stream: TMemorystream): Boolean;
begin
  result := (index >= 0) and (index <= high(FIndex));
  if result and assigned(Stream) then
  begin
    Stream.SetSize(FIndex[index].len);
    FStream.Position := FIndex[index].Offset;
    FStream.Read(Stream.Memory^, Stream.Size);
    FStream.Seek(0, 0);
  end;
end;

end.

Geändert von Peter666 (31. Aug 2014 um 19:13 Uhr)
  Mit Zitat antworten Zitat