AsphyreArcASDb.pas
上传用户:ctlcnc
上传日期:2021-12-10
资源大小:4933k
文件大小:4k
源码类别:

2D图形编程

开发平台:

Delphi

  1. unit AsphyreArcASDb;
  2. //---------------------------------------------------------------------------
  3. // AsphyreArcASDb.pas                                   Modified: 07-Jan-2007
  4. // Archive Wrapper for ASDb file format                           Version 1.0
  5. //---------------------------------------------------------------------------
  6. // The contents of this file are subject to the Mozilla Public License
  7. // Version 1.1 (the "License"); you may not use this file except in
  8. // compliance with the License. You may obtain a copy of the License at
  9. // http://www.mozilla.org/MPL/
  10. //
  11. // Software distributed under the License is distributed on an "AS IS"
  12. // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  13. // License for the specific language governing rights and limitations
  14. // under the License.
  15. //---------------------------------------------------------------------------
  16. interface
  17. //---------------------------------------------------------------------------
  18. uses
  19.  Classes, SysUtils, AsphyreAsserts, AsphyreDb,  MediaUtils, AsphyreArchives;
  20. //---------------------------------------------------------------------------
  21. type
  22.  TAsphyreArchiveASDb = class(TAsphyreCustomArchive)
  23.  private
  24.   FArchive: TASDb;
  25.  protected
  26.   function GetItemCount(): Integer; override;
  27.   function GetItemName(Num: Integer): string; override;
  28.   function OpenArchive(const FileName: string): Boolean; override;
  29.   procedure CloseArchive(); override;
  30.   procedure DoCreate(); override;
  31.  public
  32.   property Archive: TASDb read FArchive;
  33.   function ExtractToDisk(const ItemName,
  34.    DestPath: string): Boolean; override;
  35.   function ExtractToStream(const ItemName: string;
  36.    Stream: TStream): Boolean; override;
  37.  end;
  38. //---------------------------------------------------------------------------
  39. procedure RegisterASDb(const Ext: string);
  40. //---------------------------------------------------------------------------
  41. implementation
  42. //---------------------------------------------------------------------------
  43. procedure TAsphyreArchiveASDb.DoCreate();
  44. begin
  45.  FAttributes:= [];
  46. end;
  47. //---------------------------------------------------------------------------
  48. function TAsphyreArchiveASDb.OpenArchive(const FileName: string): Boolean;
  49. begin
  50.  Result:= True;
  51.  if (FArchive = nil) then
  52.   begin
  53.    FArchive:= TASDb.Create();
  54.    FArchive.OpenMode:= opReadOnly;
  55.   end;
  56.  if (FArchive.FileName <> FileName) then
  57.   begin
  58.    FArchive.FileName:= FileName;
  59.    Result:= FArchive.UpdateOnce();
  60.   end;
  61. end;
  62. //---------------------------------------------------------------------------
  63. procedure TAsphyreArchiveASDb.CloseArchive();
  64. begin
  65.  if (FArchive <> nil) then
  66.   begin
  67.    FArchive.Free();
  68.    FArchive:= nil;
  69.   end;
  70. end;
  71. //---------------------------------------------------------------------------
  72. function TAsphyreArchiveASDb.GetItemCount(): Integer;
  73. begin
  74.  Assert((FArchive <> nil)and(FArchive.FileName <> ''), msgArchiveNotOpened);
  75.  Result:= FArchive.RecordCount;
  76. end;
  77. //---------------------------------------------------------------------------
  78. function TAsphyreArchiveASDb.GetItemName(Num: Integer): string;
  79. begin
  80.  Assert((FArchive <> nil)and(FArchive.FileName <> ''), msgArchiveNotOpened);
  81.  Result:= FArchive.RecordKey[Num];
  82. end;
  83. //---------------------------------------------------------------------------
  84. function TAsphyreArchiveASDb.ExtractToStream(const ItemName: string;
  85.  Stream: TStream): Boolean;
  86. begin
  87.  Assert((FArchive <> nil)and(FArchive.FileName <> ''), msgArchiveNotOpened);
  88.  Result:= FArchive.ReadStream(ItemName, Stream);
  89. end;
  90. //---------------------------------------------------------------------------
  91. function TAsphyreArchiveASDb.ExtractToDisk(const ItemName,
  92.  DestPath: string): Boolean;
  93. var
  94.  Stream: TFileStream;
  95. begin
  96.  Stream:= TFileStream.Create(MakeValidPath(DestPath) +
  97.   MakeValidFileName(ItemName), fmCreate or fmShareExclusive);
  98.  try
  99.   try
  100.    Result:= FArchive.ReadStream(ItemName, Stream);
  101.   except
  102.    Result:= False;
  103.   end;
  104.  finally
  105.   Stream.Free();
  106.  end;
  107. end;
  108. //---------------------------------------------------------------------------
  109. procedure RegisterASDb(const Ext: string);
  110. begin
  111.  ArchiveManager.RegisterExt(Ext, TAsphyreArchiveASDb);
  112. end;
  113. //---------------------------------------------------------------------------
  114. end.