Einzelnen Beitrag anzeigen

freimatz

Registriert seit: 20. Mai 2010
1.446 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Virtueller Zugriff auf Dateien

  Alt Gestern, 08:51
Hier nun ein Beispiel. Es ist nur für eine Funktion. Eine Klasse für ZIP-Dateien wäre anlog zu der für ISO.
Delphi-Quellcode:
unit FileWrapper;

interface

uses
  System.SysUtils;

type
  IFileWrapper = interface
    ['{18943149-C314-4003-BC7F-F50C3860804A}']
    function FileExists(const AFilename: string): Boolean;
  end;

  //Für ein standardmässiges Dateisystem
  TDefaultFileWrapper = class(TInterfacedObject, IFileWrapper)
  public
    function FileExists(const AFilename: string): Boolean;
  end;

  //Für eine ISO-Datei
  TIso8660FileWrapper = class(TInterfacedObject, IFileWrapper)
  public
    constructor Create(const AIsoFilenname: string);
    //True wenn Datei in der ISO-Datei existiert. Laufwerksbuchstabe wird ignoriert
    function FileExists(const AFilename: string): Boolean;
  end;

var
  //Ein FileWrapper für die üblichen Fälle
  DefaultFileWrapper: IFileWrapper;

implementation

function TDefaultFileWrapper.FileExists(const AFilename: string): Boolean;
begin
  Result := System.SysUtils.FileExists(AFilename);
end;

constructor TIso8660FileWrapper.Create(const AIsoFilenname: string);
begin
  inherited Create();
  //TODO : ISOLib einbinden
end;

function TIso8660FileWrapper.FileExists(const AFilename: string): Boolean;
begin
  Result := False; //TODO : implement FileExists
end;

//------------------------------------------------------------------------------
//Das ist nun ein extrem rudimentäres Beispiel für den alten Code
procedure AltVerarbeiteCD(ALaufwerksbuchstabe: Char);
begin
  if FileExists(ALaufwerksbuchstabe + '\setup.ini') then begin
    //Werte Dateien aus - sehr viele Dateioperationen
  end;
end;

//------------------------------------------------------------------------------
//Das wären die neue Methoden die den Wrapper benutzt.
//Alle Fileoperationen werden vorne mit "AFileWrapper." ergänzt
procedure NeuVerarbeite(
  AFileWrapper : IFileWrapper;
  ALaufwerksbuchstabe: Char);
begin
  if AFileWrapper.FileExists(ALaufwerksbuchstabe + '\setup.ini') then begin
    //Werte Dateien aus - sehr viele Dateioperationen
  end;
end;

procedure NeuVerarbeiteCD(ALaufwerksbuchstabe: Char);
begin
  NeuVerarbeite(DefaultFileWrapper, ALaufwerksbuchstabe);
end;

procedure NeuVerarbeiteIso(AIsoFilenname: string);
var
  Iso8660FileWrapper: IFileWrapper;
begin
  Iso8660FileWrapper := TIso8660FileWrapper.Create(AIsoFilenname);
  NeuVerarbeite(Iso8660FileWrapper, '-');
end;

initialization

DefaultFileWrapper := TDefaultFileWrapper.Create();

end.
Nochmals die Fragen: a) Gibt es schon sowas irgendwo? b) Gibt es bessere Ideen?
  Mit Zitat antworten Zitat