|
- unit uutlSerialization;
-
- {$mode objfpc}{$H+}
-
- interface
-
- uses
- Classes, SysUtils;
-
- type
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- IutlFileReader = interface
- ['{3A9C3AE3-CAEE-44C9-85BE-0BCAA5C1BE7A}']
- function LoadStream(const aFilename: String; const aStream: TStream): Boolean;
- end;
-
- IutlFileWriter = interface
- ['{3DF84644-9FC4-4A8A-88C2-73F13E72B1ED}']
- procedure SaveStream(const aFilename: String; const aStream: TStream);
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TutlSimpleFileReader = class(TInterfacedObject, IutlFileReader)
- public
- function LoadStream(const aFilename: String; const aStream: TStream): Boolean;
- end;
-
- TutlSimpleFileWriter = class(TInterfacedObject, IutlFileWriter)
- public
- procedure SaveStream(const aFilename: String; const aStream: TStream);
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TutlFileReaderProxy = class(TInterfacedObject, IutlFileReader)
- private
- fReader: IutlFileReader;
- fPrefix: String;
- public
- function LoadStream(const aFilename: String; const aStream: TStream): Boolean;
- constructor Create(const aReader: IutlFileReader; const aPrefix: String);
- end;
-
- TutlFileWriterProxy = class(TInterfacedObject, IutlFileWriter)
- private
- fWriter: IutlFileWriter;
- fPrefix: String;
- public
- procedure SaveStream(const aFilename: String; const aStream: TStream);
- constructor Create(const aWriter: IutlFileWriter; const aPrefix: String);
- end;
-
- implementation
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TutlSimpleFileReader//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TutlSimpleFileReader.LoadStream(const aFilename: String; const aStream: TStream): Boolean;
- var
- fs: TFileStream;
- begin
- result := FileExists(aFilename);
- if result then begin
- fs := TFileStream.Create(aFilename, fmOpenRead);
- try
- aStream.CopyFrom(fs, fs.Size - fs.Position);
- finally
- FreeAndNil(fs);
- end;
- end;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TutlSimpleFileWriter//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TutlSimpleFileWriter.SaveStream(const aFilename: String; const aStream: TStream);
- var
- fs: TFileStream;
- begin
- fs := TFileStream.Create(aFilename, fmCreate);
- try
- fs.CopyFrom(aStream, aStream.Size - aStream.Position);
- finally
- FreeAndNil(fs);
- end;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TutlFileReaderProxy///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TutlFileReaderProxy.LoadStream(const aFilename: String; const aStream: TStream): Boolean;
- var
- dir, name: String;
- begin
- dir := ExtractFilePath(aFilename);
- name := ExtractFileName(aFilename);
- result := fReader.LoadStream(dir + fPrefix + name, aStream);
- end;
-
- constructor TutlFileReaderProxy.Create(const aReader: IutlFileReader; const aPrefix: String);
- begin
- inherited Create;
- fReader := aReader;
- fPrefix := aPrefix;
- end;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TutlFileWriterProxy///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TutlFileWriterProxy.SaveStream(const aFilename: String; const aStream: TStream);
- var
- dir, name: String;
- begin
- dir := ExtractFilePath(aFilename);
- name := ExtractFileName(aFilename);
- fWriter.SaveStream(dir + fPrefix + name, aStream);
- end;
-
- constructor TutlFileWriterProxy.Create(const aWriter: IutlFileWriter; const aPrefix: String);
- begin
- inherited Create;
- fWriter := aWriter;
- fPrefix := aPrefix;
- end;
-
- end.
|