⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basedocumentfile.pas

📁 Advanced Data Import Component Suite for Borland Delphi and C++ Builder allows you to import your da
💻 PAS
字号:
unit BaseDocumentFile;

{$I QImport3VerCtrl.Inc}

interface

uses
  QImport3StrTypes;

type
  TBaseDocumentFile = class
  private
    FFileName: qiString;
    FLoaded: boolean;
    FCurrFolder: qiString;
    procedure SetFileName(const Value: qiString);
  protected
    procedure LoadXML(WorkDir: qiString); virtual; abstract;
  public
    constructor Create; virtual;

    procedure Decompress;
    procedure DeleteTempFolder;
    procedure Load;
    procedure Clear;

    property Loaded: boolean read FLoaded;
    property FileName: qiString read FFileName write SetFileName;
  end;

implementation

uses
  Classes, SysUtils, Windows, ZipMcpt, StdCtrls, ExtCtrls
  {$IFDEF VER130}, FileCtrl{$ENDIF};

{ TBaseDocumentFile }

const
  LF = #13#10;
  sFileNameNotDefined = 'File name is not defined';
  sFileNotFound = 'File %s not found';

procedure TBaseDocumentFile.SetFileName(const Value: qiString);
begin
  if FFileName <> Value then;
  begin
    FFileName := Value;
    FLoaded := False;
  end;
end;

procedure TBaseDocumentFile.Decompress;
var
  ZipFile: TMiniZip;
begin
  FCurrFolder := ExtractFileDir(ParamStr(0)) + '\temp\';
  ZipFile := TMiniZip.Create(nil);
  try
    ZipFile.UnZipfile := AnsiString(FFileName);
    ZipFile.UnzipAllTo(FCurrFolder);
  finally
    ZipFile.Free;
  end;
end;

procedure TBaseDocumentFile.DeleteTempFolder;

  function FullRemoveDir(Dir: string; DeleteAllFilesAndFolders,
    StopIfNotAllDeleted, RemoveRoot: boolean): Boolean;
  var
    i: Integer;
    SRec: TSearchRec;
    FN: string;
  begin
{$IFDEF VCL6} 
  {$WARN SYMBOL_PLATFORM OFF}
{$ENDIF}
    Result := False;
    if not DirectoryExists(Dir) then
      exit;
    Result := True;
    Dir := IncludeTrailingBackslash(Dir);
    i := FindFirst(Dir + '*', faAnyFile, SRec);
    try
      while i = 0 do
      begin
        FN := Dir + SRec.Name;
        if (SRec.Attr = faDirectory) or (SRec.Attr = faDirectory + faArchive) then
        begin
          if (SRec.Name <> '') and (SRec.Name <> '.') and (SRec.Name <> '..') then
          begin
            if DeleteAllFilesAndFolders then
              FileSetAttr(FN, faArchive);
            Result := FullRemoveDir(FN, DeleteAllFilesAndFolders,
              StopIfNotAllDeleted, True);
            if not Result and StopIfNotAllDeleted then
              exit;
          end;
        end
        else
        begin
          if DeleteAllFilesAndFolders then
            FileSetAttr(FN, faArchive);
          Result := SysUtils.DeleteFile(FN);
          if not Result and StopIfNotAllDeleted then
            exit;
        end;
        i := FindNext(SRec);
      end;
    finally
      SysUtils.FindClose(SRec);
    end;
    if not Result then
      exit;
    if RemoveRoot then 
      if not RemoveDir(Dir) then
        Result := false;

{$IFDEF VCL6} 
  {$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
  end;

begin
  FullRemoveDir(FCurrFolder, True, False, True);
end;

constructor TBaseDocumentFile.Create;
begin
  FLoaded := False;
end;

procedure TBaseDocumentFile.Load;
begin
  if FFileName = EmptyStr then
    raise Exception.Create(sFileNameNotDefined);
  if not FileExists(FFileName) then
    raise Exception.CreateFmt(sFileNotFound, [FFileName]);
  if not FLoaded then
    try
      Decompress;
      if DirectoryExists(FCurrFolder) then
      begin
        LoadXML(FCurrFolder);
        FLoaded := True;
      end;
    finally
     DeleteTempFolder;
    end;
end;

procedure TBaseDocumentFile.Clear;
begin
  FFileName := '';
  FLoaded := False;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -