* Added regular loadfromstream/saveToStream methods (bug 26003)

git-svn-id: trunk@30323 -
This commit is contained in:
michael 2015-03-25 17:52:18 +00:00
parent 63405dbfdd
commit 273b945473

View File

@ -32,7 +32,7 @@ uses
SysUtils, Classes, DOM, XMLRead, XMLWrite;
resourcestring
SWrongRootName = 'XML file has wrong root element name';
SWrongRootName = 'XML file has wrong root element name: expected "%s" but was "%s"';
type
EXMLConfigError = class(Exception);
@ -76,7 +76,10 @@ type
procedure OpenKey(const aPath: DOMString);
procedure CloseKey;
procedure ResetKey;
procedure SaveToFile(AFileName: string);
procedure SaveToFile(Const AFileName: string);
procedure SaveToStream(S : TStream);
procedure LoadFromFile(Const AFileName: string);
procedure LoadFromStream(S : TStream);
function GetValue(const APath: DOMString; const ADefault: DOMString): DOMString; overload;
function GetValue(const APath: DOMString; ADefault: Integer): Integer; overload;
@ -130,20 +133,54 @@ end;
procedure TXMLConfig.Flush;
begin
if Modified and not FReadOnly then
begin
SaveToFile(FFilename)
if (FFileName<>'') then
SaveToFile(FFilename)
end;
procedure TXMLConfig.SaveToFile(const AFileName: string);
Var
F : TFileStream;
begin
F:=TFileStream.Create(AFileName,fmCreate);
try
SaveToStream(F);
FFileName:=AFileName;
finally
F.Free;
end;
end;
procedure TXMLConfig.SaveToFile(AFileName: string);
procedure TXMLConfig.SaveToStream(S: TStream);
begin
if AFileName <> '' then
begin
WriteXMLFile(Doc, AFilename);
FModified := False;
WriteXMLFile(Doc,S);
FModified := False;
end;
procedure TXMLConfig.LoadFromFile(const AFileName: string);
Var
F : TFileStream;
begin
F:=TFileStream.Create(AFileName,fmOpenread or fmShareDenyWrite);
try
ReadXMLFile(Doc, AFilename);
FFileName:=AFileName;
finally
F.Free;
end;
end;
procedure TXMLConfig.LoadFromStream(S: TStream);
begin
ReadXMLFile(Doc,S);
FModified := False;
if (Doc.DocumentElement.NodeName<>FRootName) then
raise EXMLConfigError.CreateFmt(SWrongRootName,[FRootName,Doc.DocumentElement.NodeName]);
end;
function TXMLConfig.GetValue(const APath: DOMString; const ADefault: DOMString): DOMString;
var
Node: TDOMElement;
@ -364,24 +401,16 @@ begin
Flush;
FreeAndNil(Doc);
FFilename := AFilename;
if csLoading in ComponentState then
exit;
if FileExists(AFilename) and not FStartEmpty then
ReadXMLFile(Doc, AFilename);
if not Assigned(Doc) then
LoadFromFile(AFilename)
else if not Assigned(Doc) then
begin
FFileName:=AFileName;
Doc := TXMLDocument.Create;
if not Assigned(Doc.DocumentElement) then
Doc.AppendChild(Doc.CreateElement(FRootName))
else
if Doc.DocumentElement.NodeName <> FRootName then
raise EXMLConfigError.Create(SWrongRootName);
end;
end;
procedure TXMLConfig.SetFilename(const AFilename: String);