QDArcリファレンス

QDArcとは

 QuadrupleD専用アーカイブ、QDA形式ファイルへのアクセスを行うためのユニットです。

 

タスク

 

定義済みの型

TQDAFileHeader

type TQDAFileHeader = packed record
  Compress:DWord; 
  Signature:Array[0..3] of Char; 
  DataCount:DWord; 
  Reserved:Array[1..244] of BYTE;
end;

 QuadrupleD専用アーカイブ形式を持ったファイルの、ファイル全体の情報を表現します。

 含まれるメンバの意味は以下の通りです。

Compress
 アーカイブが圧縮アーカイブなら1、そうでないなら0です

Signature
 アーカイブのIDです。現バージョンのQuadrupleDアーカイブでは、'QDA0'という文字列が入っています

DataCount
 アーカイブに含まれるデータの個数です

Reserved
 将来の拡張のため、予約されています

 

TQDADataHeader

type TQDADataHeader = packed record
  Offset:DWord; 
  Length:DWord; 
  RestoredLength:DWord;
  ID:Array[0..255] of Char; 
end;

 QuadrupleD専用アーカイブ形式を持ったファイル内に含まれる、個々のデータについての情報を表現します

 含まれるメンバの意味は以下の通りです。

Offset
 そのデータのQDAファイル内の、ファイル先頭からの格納位置(バイト単位)

Length
 そのデータの、QDAファイル内でのサイズ(バイト単位)

RestoredLength
 そのデータの、解凍後のサイズ(バイト単位)

ID
 そのデータを解凍する際のID

 

TQDANotifyEvent

type TQDANotifyEvent = procedure (Progress,FileCount:Integer; SourceFile:String) of object;

 この型は、CreateQDAFileの圧縮の過程で呼び出されるコールバック関数の型を表現します。1個のデータの圧縮が完了した時点で呼ばれます。

 Progress個のファイルが、現在までに完了したファイルの個数であり、FileCountが圧縮ファイルの総数です。また、SourceFileには最後に圧縮を完了したファイル名が渡されます。

 

関数

CreateQDAFile

procedure CreateQDAFile(FileName:String; SourceFile, IDs:TStrings; doCompress:Boolean;
  callback:TQDANotifyEvent);

 FileNameで示されるQDAファイルを作成します。

 SourceFileがQDAファイルに格納されるデータの読み出し元となるファイルで、それぞれのデータはIDsで示されるIDを付けてQDAファイルの中に保存されます。

 SourceFileに含まれる文字列の数と、IDsに含まれる文字列の数は同じで無ければなりません。

 doCompressは、圧縮するか否かのフラグで、Trueを指定すると個々のデータを圧縮して保存します。

 CreateQDAFile手続きによるアーカイブファイル作成は、圧縮対象となるファイルが多かったり、サイズが大きかったりする場合、長い時間の掛かる場合があります。

 ファイル1個がアーカイブファイルに格納される度に、callbackで示される関数が呼び出されます。

 

ExtractFromQDAFile
ExtractFromQDAStream

function ExtractFromQDAFile(FileName:String; ID:String):TMemoryStream;

function ExtractFromQDAStream(Source:TStream; ID:String):TMemoryStream;

 FileNameで示されるQDAファイルまたは、Streamで示されるQDAファイルを格納したTStreamオブジェクトから、IDというデータIDを持ったデータを取り出して、TMemoryStreamオブジェクトとして返します。

 test.qdaというファイルから、TEST.BMPというIDを持ったデータを取り出して、TBitmapオブジェクト変数bmpに格納する例を示します。

var
  bmp:TBitmap

procedure ExtractTest;
var
ms:TMemoryStream;
begin
  //抽出
  ms:=ExtractFromQDAFile('test.qda', 'TEST.BMP');
 
  //bmpオブジェクトに読みこませる
  bmp.LoadFromStream(ms);

  //使い終わったTMemoryStreamオブジェクトは、必ず呼び出し側で解放してください
  ms.Free;
end;

 

GetQDAFileInfo

function GetQDAFileInfo(FileName:String):TQDAFileHeader;

  FileNameで示されるQDAファイルのヘッダ情報を取得します。

 

GetQDADataInfo

function GetQDADataInfo(FileName:String; index:Integer):TQDADataHeader;

 FileNameで示されるQDAファイルの、index番目(0が先頭)のデータについてのヘッダ情報を取得します。