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.